logo
publist
写文章

简介

该用户还未填写简介

擅长的技术栈

可提供的服务

暂无可提供的服务

Linux内核中ELF可执行文件的装载/l…

在Linux系统中运行一个可执行的ELF文件时,内核首先需要识别这个文件,然后解析并装载它以构建进程的内存空间,最后切换到新的进程来运行。在fs/binfmt_elf.c中定义了函数load_elf_binary()和load_elf_library()分别用于装载和解析ELF格式的可执行文件和动态连接库。下面来研究一下在load_elf_binary()中做了哪些事情,一个新的进程的内存空间

Linux内核线程

本文以ARM架构为例,讲解linux的内核线程是如何创建的。Linux内核在完成初始之后,会把控制权交给应用程序。只有当硬件中断、软中断、异常等发生时,CPU才会从用户空间切换到内核空间来执行相应的处理,完成后又回来用户空间。如果内核需要周期性地做一些事情(比如页面的换入换出,磁盘高速缓存的刷新等),又该怎么办呢?内核线程(内核进程)可以解决这个问题。

递归算法(2) Hilbert-Peano曲线

         如上图所示,这就是一个Hilbert-Peano曲线,它的特点是蜿蜒曲折、一气呵成,能经过平面上某一正方形区域内所有的点。        Hilbert-Peano曲线也是一种分形图形,它可以画得无限复杂。它的初始图元是正方形,在迭代生成的过程中,不断细化出小的正方形,图中的线段其实是用于连接各正方形的连线。        参照下图所示,以一次基本的迭代为例,这次迭代

#算法#python
KVM简介

KVM(K Virtual Machine)是SUN公司的一种主要面向嵌入式设备的小型Java虚拟机,在PC机上也能使用。KVM最大的特点是极为小巧,只有一个可执行文件,大概200K多一点。相应地,KVM的功能也很弱,它只有cldc1.1的类库,所以没有图形界面;它也没有采用优化技术来提高性能,是一种比较原始的虚拟机。正因为KVM的小巧和简单,它是Java爱好者研究虚拟机的理想入门教材。而

#虚拟机#java#嵌入式
KVM的类加载

首先简要介绍一下class文件的结构(详细内容请参考Java虚拟机规范,在《深入Java虚拟机》一书中也有详细描述):长度(字节)名称解释

#虚拟机#java
KVM的执行引擎(上) — 栈和帧

接下来的两篇将介绍在KVM中字节是如何执行的,这是KVM中比较核心的内容,分为两部分来讲,本篇先介绍虚拟机中的栈和帧是如何实现的。 首先来看一些全局指针,在头文件kvm/vmcommon/h/interpret.h中定义有以下结构:struct GlobalStateStruct {     BYTE*         gs_ip; /* Instruction pointer (

#虚拟机#java
通过UUID来挂载硬盘分区

  现在的开发转到了ubuntu虚拟机上来,代码比较乱,有好几份,每一份都有10G左右,为了避免单个虚拟硬盘文件过大,也为了规避风险,新建了虚拟硬盘存放代码。这两天发现一个问题,几个后来加上的硬盘分区在启动时被分配的设备名是不固定的,很麻烦。但是根分区不会错,因为在/etc/fstab里面,"/"分区是通过指定分区的UUID来挂的,不会因为随机的设备名而搞错。我自己加的分区是通过指定/dev/

#ubuntu#虚拟机
KVM的执行引擎(下) — 指令集

指令集是虚拟机中最底层也是最核心的部分,Java程序中的变量赋值、函数调用等所有操作最后都要被转化为一条条的指令来执行。指令集是在Java虚拟机规范中定义的,各种虚拟机实现要给予精确的实现,下面就来介绍一下指令集的分类以及在KVM中是如何实现的。在头文件kvm/vmcommon/h/interpret.h中有如下对指令集种类的定义: typedef enum {        

#虚拟机#java
到底了