




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
下面总结针对老师上课时勾画的重点,仅供参考。时间有限,总结的比较仓促,大家发现有什么错误或者有需要补充的可以Q我,或者在群里给出补充和修改内容。大家应该以书本为重。第1,2章 内核简介和从内核出发1. linux内核与windows内核差异答:操作系统内核可以分为两大阵营:单内核和微内核(第三阵营是外内核,主要用在科研系统中,不做讨论)单内核:把内核从整体上作为一个单独的大过程来实现,同时也运行在一个单独的地址空间。微内核:微内核并不作为一个单独的大过程来实现,相反,微内核的功能被划分成多个独立的过程,每个过程叫做一个服务器。(详细见中文版6页)Linux是单内核,windows是微内核。差异分析大家自己看着办,从6页自己选择性填写。2. 内核版本表示,各个位置上数的代表含义答:linux内核有两种:稳定和处于开发中的。上图中:第一个数字是版本号,第二个数字是从版本号,第三个数字是修订版本号,第四个数字可选,表示稳定的版本号。从第二个数字的奇偶性可以判别该内核是稳定版还是开发版,奇数表示开发版,偶数表示稳定版。6表示是稳定版,而该稳定版本号是1.3. 内核编译,编译完成后生成的镜像文件名称答:linux实验课不止一次用到内核编译,在这我简单说明下:先到官网下载一个linux版本的源代码,tar 命令解压,如tar xvjf linux-x.y.z.bz2.各参数含义:-x:解压,-v:显示所有过程,-j:有bz2属性的,-f:使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。解压后进入相应解压文件目录,进行编译前的相关配置及清理工作。使用一种内核编译方法,其中自动精简内核编译配置make localmodconfig适合于新手。开始编译 sudo make-kpkg clean ; make-kpkg -initrd -append-to-version=-xxx kernel_image。-xxx是自己取得一个名字。编译完成,cd .退到上以及目录执行sudo dpkg -i linux-image-2.6.34.11-xxx_i386.deb(镜像文件名称) ,安装生成的镜像文件。之后的配置grub开机启动项在此不赘述,有兴趣自行了解(主要有两个参数,default:决定grub引导时光标默认停留的引导标签位置,timeout:停留在引导标签页的时间)4. Linux是单内核,内核运行在单独的内核空间地址上。我当时记到的是执行时,内核全部载入。不过觉得有问题,书上说的是linux汲取微内核精华,支持动态装载内核模块,允许在需要的时刻动态地卸除和加载部分内核代码,大家自己判断。5. 堆栈大小:用户空间和内核空间对应各自的栈,其中用户空间堆栈较大,且能动态增长。内核栈的准确大小随体系结构而变。在X86上,栈的大小在编译时配置。在32位机上,内核栈是2页,对应8KB;在64位机上。内核栈也是2页,对应16KB。第3章 进程管理1. 每个进程对应的PCB及task-struct内核把进程列表存放在叫做任务队列的双向循链表中,链表中的每一个项都是一个task-struct结构。Linux通过slab高速缓存层分配器分配task-struct结构,达到对象复用和缓存着色的目的。注意一下在内核栈中用struct thread_info结构来指向进程描述符,即指向struct task_struct 结构。每个任务的thread_info 结构在它的内核栈的尾端分配。结构中的task域中存放的是指向该任务实际task_struct的指针。2线程和进程的关系,fork(),clone()函数的用法及差别进程就是处于执行期的程序,当然还要包含其他资源,如打开的文件,挂起的信号,内核内部数据,处理器状态,一个活多个具有内存映射的内存空间地址及一个或多个执行的线程,存放全局变量的数据段等等。线程是进程中活动的对象,每个线程都有自己独立的程序计数器,进程栈和一组进程寄存器。内核调度的对象是线程而不是进程。Linux对进程和线程并不特别区分。Fork()函数创建进程,linux的fork()函数使用写时拷贝,子进程和父进程共享一份拷贝(子进程没有写入时)。调用fork()函数的是父进程,新产生的是子进程。在该调用结束时,在返回点的这个相同位置上,父进程恢复执行,子进程开始执行,即现在有两个进程在执行了,而且执行的是相同的一块代码,哪个获得处理器就执行。Fork()系统调用从内核返回两次,当进程pid为0时表示父进程子在运行,pid0时表示子进程在运行,pidC库(即API):INT 0x80 -system_call-系统调用服务例程-内核程序执行系统调用的连锁反应:陷入内核,传递系统调用号和参数,执行正确的系统调用函数,并把返回值带回用户空间。宏调用:Linux提供一组宏,用于在用户空间对系统调用进行访问。形如_syscalln(),其中n的范围0到6,代表需要传递的系统调用参数个数,每个宏有2+2*n个参数。另外补充:应用程序接口(API),要了解的看书57页;系统调用号,每个系统调用对应一个独一无二的系统调用号,一旦分配就不能再有任何改变否则编译好的应用程序就会崩溃。详细见书59页第6章 内核数据结构1. 内核中的数据结构答:链表:链表是一种存放和操作可变数量(常称为节点)的数据结构队列:一种先进先出的数据结构(生产者消费者问题)。Linux通过队列实现kfifo,提供两个主要操作:enqueue(入队)和dequeue(出队)。维护两个偏移量:入口偏移和出口偏移。映射:也称为关联数组,实际上是一个由唯一键组合的集合,而每个键必然关联一个特定的值。二叉树:主要了解自平衡二叉树,即一个所有叶子节点深度之差不超过1的二叉搜索树。(不明白的见书85)数据结构的适用范围:A 如果你的数据集合的主要操作是遍历数据,就使用链表。B 如果你的代码符合生产者/消费者模式,怎使用队列。C 如果你需要映射一个UID到一个对象,就使用映射。D 如果你需要存储大量数据,并且迅速检索,呢么红黑树最好(自平衡二叉树)第7章 中断和中断处理中断本质是一种特殊的电信号,由硬件设备发向处理器。中断处理程序:内核执行一个函数来响应一个特定的中断,该函数叫做中断处理程序或中断服务例程。中断处理程序运行在被我们称之为中断上下文的特殊上下文中。该上下文也被称作原子上下文,即该上下文中代码不可阻塞。必须保证中断处理程序能够快速执行。1. 中断分两部分:上半部和下半部,用来平衡快速执行和完成大量工作量之间的矛盾。中断处理程序是上半部分:接收到一个中断,立即开始执行,但只做有严格时限的工作,如对接收的中断应答和硬件复位,这些工作在所用中断被禁止时完成;下半部分在第8章中说明。(例子见书93页)2. 中断注册函数:驱动程序通过request_irq()函数注册一个中断处理程序,并且激活给定的中断线,以处理中断。Free_irq()注销中断处理程序,禁用其中断线。说到这里,简单给出IRQ的定义:不同的设备对应的中断不同,通过一个唯一的数字标识。这些数字标识通常被称作中断请求线(IRQ),如IRQ 0是时钟中断,IRQ 1是键盘中断。一条中断请求线对应一种中断,可连接多个同种类型的硬件设备。3. 共享的中断处理程序与非共享的中断处理程序的差异:答:a. request_irq()的参数flags必须设置IRQF_SHARED标志。b.对于每个注册中断处理程序来说,dev参数必须唯一。c. 中断处理程序必须能够区分它的设备是否真的产生了中断。共享的中断线的驱动程序都必须满足以上要求。4. 中断统计信息查看答:两个宏,in_interrupt(),in_irq,说明见下表:也可参考书106页。第8章 下半部和推后执行的工作上半部分需要完成的任务在第7章中已经给出,不再赘述。下半部分:执行与中断处理密切相关但中断处理程序本身不执行的工作。中断机制:分为三种,软中断(Softirqs),Tasklet,工作队列(Work queue)适用范围:A. 如果被考察代码本身多线索化耳朵工作做得非常好,如网络子系统,它完全使用单处理器变量,那么选择软中断。B. 如果代码的多线索化考虑的并不是很充分,那么选择tasklet好些。C. 如果需要把任务推后到进程上下文中完成,那么只能选择工作队列了。区别:软中断和tasklet不允许休眠,而workqueue则可以。第9章 内核同步介绍首先扯一些相关的,在使用共享内存的应用程序中,程序员必须特别留意对共享资源的保护。于是就有了临界区的说法:访问和操作共享数据的代码段。为了在临界区中避免并发访问,我们必须保证这些代码原子执行,即相当于整个临界区是一个不可分割的指令一样。有两个或者两个以上的访问者同时来瓜分的话很容易出现错误。一旦上述情况发生,就称之为竞争条件。我们把避免并发和防止竞争条件称之为同步。1. 死锁(dead lock):产生条件:要有一个或者多个执行线程和一个或多个资源,每个线程都在等待其中的一个资源,但所有的资源都已经被占用。所有线程都在相互等待,但它们永远都不会释放已经占有的资源。于是任何线程都无法继续,死锁发生。简单的一个例子,线程A已经获得资源m,它还需要资源n才能完成,而此时线程B已经获得资源n,它需要获得资源m才能完成,这样A和B都希望获得对方的资源而又不肯释放自己已经获得的资源,所以两个线程就都不能完成,发生死锁。2. 避免死锁的规则:A 按顺序加锁。B 防止发生饥饿。C 不要重复请求同一个锁。D 设计应力求简单-越复杂的加锁方案越有可能造成死锁。第10章 内核同步方法1. 原子操作(Atomic Operations):它是其他同步方法的基石。原子操作可以保证指令以原子的方式执行-执行过程不被打断。2. 自旋锁(spin lock):自旋锁最多只能被一个可执行的线程持有。如果一个线程企图得到一个已经被持有的自旋锁,那么该线程就会一直进行忙循环等待等待锁重新可用。如果锁未被征用,则立即获得。说的简单些,一个被征用的自旋锁使得请求它的线程在等待锁重新可用时自旋,即忙等待。自旋锁特征:不休眠(正确性有待考证),不可递归,可以使用在中断处理程序中,加锁前首先禁止本地中断,解锁后打开本地中断。读写自旋锁:解决读者写者问题,优先照顾读者。解释:当读锁被持有时,写操作为了互斥访问只能等待,但是,读者确可以继续成功地获得锁。读者很多时,写者容易产生饥饿。3. 信号量(Semaphores):信号量是一种睡眠锁。如果一个任务试图获得一个已经被占用的信号量,信号量会将其推进一个等待队列,然后让其睡眠。为了找到一种更加简单的睡眠锁,内核引入了互斥体(metux),指任何可以睡眠的强制互斥锁,简单的说互斥体是一种互斥信号。4. 自旋锁与信号量的比较5. 顺序锁(Sequential locks):通常被称为seq锁。这种锁提供一种简单机制,用于读写共享数据。实现这个锁主要依靠一个计数器。写操作会使序列值增加,而在读操作之前和之后都会去读取序号,如果前后相等,说明读操作未被打断,否则被打断。顺序锁优先照顾写者,即在没有其他写者的时候,写锁总是可以被一个写者获得,读者不影响写者。当有多个写者的时候,读者很可能饥饿。6. 顺序与屏障的概念与定义(Ordering and Barriers)答:当处理多处理器之间或硬件设备之间的同步问题时,有时需要在你的程序代码中以指定的顺序发出读内存和写内存指令。在和硬件交互时,时常要确保一个给定的读操作发生在其他读操作或写操作之前。另外,在多处理器上,可能需要按写数据的顺序读数据(称之为RAW,即写后读相关)。编译器与处理器为了提高效率,会对读写操作重排序。所有可能重排序读和写操作的处理器提供了机器指令来确保顺序要求,即和顺序执行的效果等效。同样的,也可以指示编译器不要给定点周围的指令进行重新排序。这些确保顺寻的指令称之为屏障(barriers)第12 章 内存管理1. Page表示答:内核把物理页作为内存管理的基本单位。内存管理单元(MMU)通常以也为单位进行处理。大多数32为体系结构支持4KB的页,64位体系结构支持8KB的页。页结构用struct page表示,有兴趣的同学可以在书上186页看下,书上给出了几个域的解释。注意一点:page结构与物理页相关。2. 区(zones)内核使用区对具有相似特性的页进行分租。Linux主要使用了四种分区A ZONE_DMA-这个分区包含的页能用来执行DMA操作。(块数据读取)B ZONE_DMA32-和ZONE_DMA类似,该区包含的页面可用来执行DMA操作,但这些页面只能被32位设别访问。C ZONE_NORMAL-这个区包含的都是能正常映射的页。D ZONE_HIGHEM-这个区包含“高端内存”,其中的页并不能永久地映射到内核地址空间。3. 高速缓存层(slab)的作用答:高速缓存:快速存储频繁使用的对象类型,便于数据频繁分配和回收。4. 使用CPU数据的原因答:1. 减少了数据锁定。需要确保本地处理器只会访问它自己的数据。2. 使用每个CPU数据可以大大减少缓存失效。(理想情况下只会访问自己的数据,而不需要去操作其他处理器缓存中的数据,导致更新自己的缓存,发生缓存失效)5. 内存空间分配,各分配函数的使用范围Kmalloc():与用户空间malloc()类似,只是多了一个flags参数,kmalloc()函数是一个简单的借口,用它获得以字节为单位的一块内存。Vmalloc():工作方式类似于kmalloc(),只是vmalloc()分配的内存虚拟地址是连续的,而kmalloc()分配的物理地址是连续的。Slab:高速缓存层用于数据频繁的分配
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中职学校毕业生就业指导计划
- 房地产项目融资渠道及风险控制方案
- 2025重庆璧山区事业单位定向考核招聘52人笔试模拟试题及答案解析
- 2025年政府购置土地协议书
- 婴儿爬行安全知识培训课件
- (2025年标准)兄妹陪伴协议书
- (2025年标准)经销服务协议书
- 2025年公务机行业当前发展现状及增长策略研究报告
- 娃娃鱼养殖知识培训课件
- (2025年标准)教师离校协议书
- GB/T 43137-2023土方机械液压破碎锤术语和商业规格
- 京东集团员工手册-京东
- 2023年苏州市星海实验中学小升初分班考试数学模拟试卷及答案解析
- GB/T 37915-2019社区商业设施设置与功能要求
- GB/T 31298-2014TC4钛合金厚板
- GB/T 27746-2011低压电器用金属氧化物压敏电阻器(MOV)技术规范
- GB/T 22237-2008表面活性剂表面张力的测定
- GB/T 13667.3-2003手动密集书架技术条件
- 导轨及线槽项目投资方案报告模板
- 复旦大学<比较财政学>课程教学大纲
- 书法的章法布局(完整版)
评论
0/150
提交评论