- 浏览: 101777 次
- 性别:
- 来自: 南京
最新评论
-
colorfire:
os.path.splitext(file)[1] 不就可以吗 ...
枚举文件夹所有后缀名,python脚本
文章列表
linux可以直接运行的文件格式都保存在一个list里,其中list的基本结构是linux_binfmt,这个结构包含3个methods:1.load_binary:执行文件创建execution environment的方法2.load_shlib:binds a shared library3.core_dump:dump the execution context of the current process in a file named core.而需要解释器来执行的文件格式,则需要在/proc/sys/fs/binfmt_misc里写入下面格式的字符串::name:type:offs ...
- 2009-02-16 20:02
- 浏览 501
- 评论(0)
exec系列函数从linux的linux_binfmt链表中,通过依次调用每个结构的load_binary函数来选择合适的运行格式,一旦找到就执行load_binary函数,否则尝试下一个linux_binfmt的load_binary,直到尝试完所有的linux_binfmt。load_binary函数:1.检查128位的magic number,看文件是不是属于这个格式2.读取文件的header3.从文件得到dynamic linker的位置4.检查dynamic linker是否有效5.调用flush_old_exec()函数,清除被之前计算所使用的所有资源,像内存,页表6.使用do_mm ...
- 2009-02-16 20:02
- 浏览 410
- 评论(0)
linux的进程有2种memory region layout:1.classic layout2.flexible layout见<understanding the linux kernel>-819页type of memory regionclassic layout flexible layouttext segment(elf) start from 0x08048000data and bss segments start right after textheapstart right afte the data and bss
file memory mappin ...
- 2009-02-16 19:54
- 浏览 952
- 评论(0)
在linux2.2以前,进行系统调用时,kernel将会对传入的参数进行比较细致的检查,特别是对指针参数,但是linux2.2后,系统在函数开始时只会检查指针是否是属于用户地址空间,而是不是有效的则在进行相关操作时才进行。2009/02/12 四
- 2009-02-16 19:53
- 浏览 470
- 评论(0)
However, once the kernel initialization phase ends, the master kernel Page Tables are not directly used by any process or kernel thread. 内核使用的master page table并不是直接被进程或者内核线程使用,而内核在申请内存空间时,使用的lazy手法不会更新进程的page table(因为更新所有的进程page table是非常耗时的),而当进程在内核态访问内核线性地址时,就会发生缺页fault,这时缺页处理函数会将相应的master page tabl ...
- 2009-02-16 19:51
- 浏览 496
- 评论(0)
当一个进程要增加线性空间时,kernel首先检查看是不是现有的memory region是不是可以被增大,如果不可以的话,就创建一个新的memory region。一个进程可以包含多个memory region,他们用list结构进行存储,考虑到如果一个进程包含太多的memory region时,查找一个特定的线性地址在哪个memory region时,开销太大。所以每个进程的mm_struct(也就是跟内存分配有关的数据结构)还有一个结构,保存了所有memory region的指针,这个结构是一个红黑树,所以可以方便地查找特定的线性地址所在的memory region.一般的访问是通过list ...
- 2009-02-16 19:49
- 浏览 593
- 评论(0)
当一个进程第一次对一个页进行读操作时,而且该页不在内存中时,kernel应该给进程分配一个新的页帧,更安全的做法是分配一个filled with zero的页帧给进程,这样才能保证别的进程的信息不会被新的进程给读取,所以linux中保留的一个这样filled with zero的页帧,叫zero page,当这种情况发生时,系统就将zero page填入页表中,并标记为不可写。当进程要对zero page进行写操作时则copy on write 机制就会被触发。2009/02/07 六
- 2009-02-16 19:49
- 浏览 425
- 评论(0)
共有1g线性空间,分成4部分:1.先映射内存的前896m空间,到high_memory结束2.剩下的用于noncontiguous memory area映射,从VMALLOC_OFFSET到VMALLOC_END,其中VMALLOC_OFFSET距high_memory8mb,每个被映射的noncontiguous memory area中间还要间隔4kb3.用于映射persistent kernel mapping,从PKMAP_BASE开始4.最后这部分用于fix-mapped linear address 详见<understand the linux kernel>第3版3 ...
- 2009-02-16 19:48
- 浏览 595
- 评论(0)
Linux 2.6 also features a vmap( ) function, which maps page frames already allocated in a noncontiguous memory area: essentially, this function receives as its parameter an array of pointers to page descriptors, invokes get_vm_area( ) to get a new vm_struct descriptor, and then invokes map_vm_area( ) ...
- 2009-02-16 19:48
- 浏览 626
- 评论(0)
首先要说的是memory area,因为有时需要的内存没有一个page frame那么大,比方说只有10bytes,如果分配一个page frame给它,则会产生很多internal fraction。这是一方面,更重要的是很多kernel的数据结构都不正好是一个或几个page frame那么大,那么在分配的时候就会造成很多internal fraction。为了解决这个问题,linux现在是采用sun solris的解决方法。在内存划出多块区域,被称为cache用来存放常用的kernel object,每个cache用来存放一类kernel object,每个cache被分为多个slab,每个 ...
- 2009-02-16 19:47
- 浏览 794
- 评论(0)
slab color是为了提高硬件cache的使用率,因为相同大小的object in different slabs有很大的可能被映射到同一个cache line,而同时又会有其它的cacheline处于空闲。解决方法如下:假设aln是对齐参数,free是每个slab为了对齐而未被使用的空间,通常free>aln将color*aln未使用的空间放到slab的最前面,后面留free-color*aln。这样就可以错开各个slab里有相同offset的object了。(color<free/aln)从这里又可以看到linux在设计时的细心程度,连本来没用的空间(free),也被用来优化 ...
- 2009-02-16 19:47
- 浏览 269
- 评论(0)
memory pool是给kernel component使用的内存cache,它保存了一些object,书上称为了memory element。是为了保证在低内存的情况下,也就是向memory allocator再也申请不到所要的内存时,component仍然可以从memory pool中申请到所需要的空间。一个memory pool中所有的cache都是一类的。2009/02/05 四
- 2009-02-16 19:47
- 浏览 635
- 评论(0)
这是一个很著名的算法,它的思想如下:首先将一系列连续的page frame看作一个block,然后每次需要allocation时,都会将一个block分成一半,一半用来满足需求,另一半则是free的,kernel中用一个list,来记录所有可用block。在linux中,这个list的名字是free_area array,数组的大小是11,即1, 2, 4, 8, 16, 32, 64, 128, 256, 512, and 1024 contiguous page frames.合并的时候需要满足3个条件:1.Both blocks have the same size, say b.2.Th ...
- 2009-02-16 19:46
- 浏览 525
- 评论(0)
linux保留了一定的reserved page frame数量由以下方式决定:The amount of the reserved memory (in kilobytes) is stored in the min_free_kbytes variable. Its initial value is set during kernel initialization anddepends on the amount of physical memory that is directly mapped in the kernel's fourth gigabyte of linear addre ...
- 2009-02-16 19:45
- 浏览 495
- 评论(0)
linux使用3种方法来实现这个目标:1.permanent kernel mappings: 这种实现方法有两个核心的数据结构,一个是dedicated page table,地址由变量pkmap_page_table来指明,这个table有512或者1024中entries,取决于pae是否被激活,负责将线性地址转为物 ...
- 2009-02-16 19:45
- 浏览 871
- 评论(0)