引言:上篇博文中,我们简单的介绍了Linux虚拟存储器的概念及组成情况,下面来分析分析进程的创建和终结及跟进程地址空间的联系. 这里首先介绍一个比较重要的概念:存储器映射 在Linux系统中,通过将一个虚拟存储器区域与一个磁盘上的对象关联起来,以初始化这个虚拟存储器区域的内容,这个过程称为存储器映射.存储器映射为共享数据.创建新的进程以及加载程序提供了一种高效的机制. 虚拟存储器区域可以映射到两种类型对象中: 1)普通文件:一个虚拟区域可以映射到普通磁盘文件的连续部分,例如可执行目标文件.虚拟区…
引言:现代操作系统提供了一种对内存的抽象概念,叫做虚拟存储器,它为每个进程提供了一个大的,一致的,和私有的地址空间.通过一个很清晰的机制,虚拟存储器提供了3个重要的能力: 1)它将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这种方式,它高效的使用了主存. 2)它为每个进程提供了一致的地址空间,从而简化了存储器管理. 3)它保护了每个进程的地址空间不被其他进程破坏. Linux操作系统同样也采用了虚拟内存技术,对一个进程而言,…
进程描述符task_struct task_struct { //进程基本信息 pid 进程id号 tgid 线程组id号,与线程组领头线程pid号相同   getpid()返回该值 tasks init_struct链接所有task_struct结构 run_list; //当前进程所处的运行链表 array 指向与进程相关的prio_array_t结构 real_parent当前进程的父进程,没有的话将会变成进程1(init)的描述符 parent 被执行跟踪时的跟踪父进程(ptrace)…
前言 本人再看深入理解Linux内核的时候发现比较难懂,看了Linux系统编程一说后,觉得Linux系统编程还是简单易懂些,并且两本书都是讲Linux比较底层的东西,只不过侧重点不同,本文就以Linux系统编程为例并且会穿插一些深入理解Linux内核的内容来写. 1 入门与基本概念 本书的背景 Linux内核3.9,gcc编译器4.8,C库2.17 文件和文件系统 文件必须打开才能访问 同一个文件可以由多个进程或者同一个进程多次打开.系统会为每个打开的文件实例提供唯一描述符.进程可以共享文件描述…
深入理解Linux内核 读书笔记 一.概论 操作系统基本概念 多用户系统 允许多个用户登录系统,不同用户之间的有私有的空间 用户和组 每个用于属于一个组,组的权限和其他人的权限,和拥有者的权限不一样.对应的是Linux的文件权限系统 进程 和程序的区别.几个进程能并发执行同一个程序,一个进程能顺序执行几个程序 程序更像是代码片段,进程是执行代码的容器 linux是抢占式操作系统,也就是一个进程只能占用CPU一段时间.非抢占式系统中,进程如果不释放CPU,可以一直占用 内核体系结构 Linux是单…
转自:http://www.cnblogs.com/likeyiyy/p/3837272.html 我对linux高端内存的错误理解都是从这篇文章得来的,这篇文章里讲的 物理地址 = 逻辑地址 – 0xC0000000:这是内核地址空间的地址转换关系. 这句话瞬间让我惊呆了,根据我的CPU的知识,开启分页之后,任何寻址都要经过mmu的转换,也就是一个二级查表的过程(386) 难道内核很特殊,当mmu看到某个逻辑地址是内核传来的之后,就不查表了,直接减去0xC0000000,然后就传递给内存控制器…
我对linux高端内存的错误理解都是从这篇文章得来的,这篇文章里讲的 物理地址 = 逻辑地址 – 0xC0000000:这是内核地址空间的地址转换关系. 这句话瞬间让我惊呆了,根据我的CPU的知识,开启分页之后,任何寻址都要经过mmu的转换,也就是一个二级查表的过程(386) 难道内核很特殊,当mmu看到某个逻辑地址是内核传来的之后,就不查表了,直接减去0xC0000000,然后就传递给内存控制器了??? 我发现网上也有人和我问了同样的问题,看这个问题 这句话太让人费解了,让人费解到以至于要怀疑…
本文基于Linux™系统对进程创建与加载进行分析,文中实现了Linux库函数fork.exec,剖析内核态执行过程,并进一步展示进程创建过程中进程控制块字段变化信息及ELF文件加载过程. 一.初识Linux进程                                                                                                                                                …
进程的七种状态 在内核源码的 include/linux/sched.h文件中: task_struct的status可表示 #define TASK_RUNNING 0 #define TASK_INTERRUPTIBLE 1 #define TASK_UNINTERRUPTIBLE 2 #define TASK_STOPPED 4 #define TASK_TRACED 8 task_struct和exit_status均可标识 #define EXIT_ZOMBIE 16 #define…
背景 近期接触容器技术时,经常看到各类比较容器与虚拟机区别的文章中会提到:容器是共享宿主机的内核,而虚拟机则是拥有自己独立的内核,所以不可能在Linux上用容器运行windows,但是用虚拟机则可以. 乍看下去,觉得Linux上无法运行windows是很自然的结论,然后突然升起一个疑问:Linux上无法运行windows容器,那Debian上可以运行Ubuntu容器吗?Ubuntu上又能运行CentOS容器吗? 从自己实际使用上看,Debian上确实有运行CentOS的docker容器,Cent…