摘要:
6.1 链表链表和静态数组的不同之处在于,他所包含的元素都是动态创建并插入链表的,在编译时不必知道具体需要创建多少个元素。链表中每个元素的创建时间各不相同,所以他们在内存中无须占用连续内存区。因为元素不连续存放,所以各个元素需要通过某种方式被连接在一起。6.1.1 单向链表和双向链表6.1.2 环形链表6.1.3 沿链表移动沿链表移动只能是线性移动。如果需要随机访问数据,一般不使用链表。使用链表存放数据的理想情况是:需要遍历所有数据或需要动态添加或删除数据。6.1.4 链表在linux中的实现linux内核中的链表不是将数据结构塞入链表,而是将链表节点塞入数据结构。使用宏container_o 阅读全文
摘要:
5.1 与内核通信 系统调用主要作用:1、它为用户空间提供了一种硬件抽象层接口。例如,当需要读写文件的时候,应用程序就可以不去管磁盘介质和类型,甚至不用去管文件所在的文件系统是哪种类型。2、系统调用保证了系统的稳定和安全。作为硬件设备和应用程序之间的中间人,内核可以基于权限、用户类型和其他一些规则对需要进行访问进行裁决。3、如果应用程序可以随意访问硬件而内核对此一无所知的话,几乎无法实现多任务和虚拟内存,当然也不可能实现良好的稳定性和安全性。在linux中,系统调用是用户空间访问内核的唯一手段;除了异常和陷入外,他们是内核唯一的合法入口。5.2 API、POSIX和C库 一般情况下,应用程.. 阅读全文
摘要:
调度程序负责决定哪个程序投入运行、何时运行以及运行多长时间。调度程序没有太复杂的原理。最大限度地利用处理器时间的原则是,只要有可执行进程,那么就总会有进程执行。但是只要系统中可运行的进程数目比处理器个数多,就注定某一给定时刻会有一些进程不能执行。4.1 多任务linux提供了抢占式的多任务处理模式,由调度程序来决定什么时候停止一个进程的运行,以便其他进程能够得到执行的机会。这个强制的挂起动作就叫做抢占。进程在被抢占之前能够运行的时间都是预先设置好的,叫进程的时间片。在非抢占模式下,除非进程自己主动停止运行,否则他会一直执行。4.2 linux的进程调度4.3 策略4.3.1 I/O消耗型和处理 阅读全文
摘要:
进程、轻量级进程和线程进程类似于人类:他们被产生,有或多或少有效的生命,可以产生一个或多个子进程,最终都要死亡。一个微小的差异是进程之间没有性别差异——每个进程只有一个父亲。从内核的观点来看:进程的目的就是担当分配系统资源的实体(CPU时间、内存等资源)。实现多线程应用的一个简单的方式是把轻量级进程与每个线程关联起来。这样线程之间就可以通过简单的共享同一内存地址空间、同一打开文件集等来访问相同的应用数据结构集;同时每个线程都可以由内核独立调度,以便一个睡眠的同时另一个仍然是可运行的。(共享内存地址、内核独立调度)。进程描述符进程描述符都是task_struct类型结构,它的字段包含了一个进程相 阅读全文
摘要:
3.1 进程 进程就是处于执行期的程序。但进程并不仅仅局限于一个可执行程序代码。通常进程还包括其他资源。进程就是正在执行的程序代码的实时结果。 执行线程,简称线程,是在进程活动中的对象。每个线程都拥有一个独立的程序计数器、进程栈和一组进程寄存器。内核调度的对象是线程而不是进程。进程提供两种虚拟机制:虚拟处理器和虚拟内存。虚拟处理器给进程一种假象,让这些进程觉得自己在独享处理器。虚拟内存让进程在分配和管理内存时觉得自己拥有整个系统的所有内存资源。同一个进程中的线程可以共享虚拟内存,但是每个都拥有各自的虚拟处理器。Linux系统中,通常是调用fork(),复制一个现有的进程来创建一个全新的进程.. 阅读全文
摘要:
硬件中的分页分页单元把线性地址转换成物理地址。把所请求的访问类型与线性地址的访问权限相比较,如果这次访问是无效的就产生一个缺页异常。线性地址被分为固定长度的单位的组,成为页。页内部连续的线性地址被分映射到连续的物理地址中。内核可以指定一个页的物理地址和存取权限,而不用为每个地址指定存取权限。分页单元把所有的RAM分成固定长度的页框,每个页框包含一个页,页框的长度与页的长度一致。页框是主存的一部分,因此也是一个存储区域,页是其中的数据块可以存放在任何页框或磁盘中。把线性地址映射到物理地址的数据结构成为页表,页表存放在主存中,并在启用分页单元之前必须由内核对页表进行适当的初始化。通过设置cr0寄存 阅读全文
摘要:
内存地址 1、逻辑地址 包含在机器语言指令中用来指定一个操作数或一条指令的地址 2、线性地址(虚拟地址) 32位无符号整数,可以用来表示高达4GB的地址,常用十六进制表示0x00000000——0xffffffff 3、物理地址 用于内存芯片级内存单元寻址。它们与从微处理器的地址引脚发送到内存总线上的电信号相对应。物理地址由32位或36位无符号整数表示内存控制单元(MMU)通过分段单元的硬件电路把一个逻辑地址转换为线性地址;分页单元的硬件电路把线性地址转换为物理地址硬件中的分段 逻辑地址->段选择符+偏移量 段选择符 大小、字段 段描述符 大小、字段、类型、格式... 阅读全文
摘要:
1、何处安装并触及源码 内核源码一般安装在/usr/src/linux目录下。不要把这个源码树用于开发,因为编译你的c库所用的内核版本就链接到这棵树。不要以root的身份对内核进行修改,而应当是建立自己的主目录,仅以root身份安装新内核。即使在安装新内核时,/usr/src/linux目录都应当原封不动。2.1.3 使用补丁 patch -pl <../patch-x.y.z2.2 内核源码树2.3 编译内核2.3.1 配置内核1、make config 2、make gconfig3、make dconfig4、make oldconfig2.3.2 减少编译的垃圾信息make &g 阅读全文
摘要:
1.3内核简介 内核的组成:1、中断服务程序——负责响应中断 2、调度程序——管理多个进程从而分享处理器时间 3、内存管理程序——管理进程地址空间 4、网络、进程间通信等系统服务程序 内核空间:内核独立于普通应用程序,一般处于系统态,拥有受保护的内存空间和访问硬件设备的所有权限,这种系统态和被保护的内存空间,统称为内核空间。 用户空间:只能看到允许使用的部分系统资源,只能使用某些特定的系统功能,不能直接访问硬件,也不能访问内核划给别人的内存范围。 内核态与用户态:当内核运行的时候系统以内核态进入内核空间执行,执行普通用户程序时,系统以用户态... 阅读全文