1. 内核空间:内核处于系统态,拥有受保护的内存空间和访问硬件设备的所有权限,这种系统态和被保护起来的内存空间,统称为内核空间。
用户空间:应用程序在用户空间执行,只能使用部分系统及特定的系统功能,不能直接访问硬件、内核划分给别人的内存范围。
2. Linux内核和传统Unix内核的比较
单内核:把它从整体上作为一个单独的大过程来实现,同时也运行在一个单独的地址空间上。可直接调用函数,大多unix基于单内核
微内核:功能被划分为多个独立的过程,每个过程叫做一个服务器。所有服务器独立运行在各自的地址空间上。通过消息传递处理微内核通信,系统采用了进程间通信(IPC),Windows NT基于微内核
Linux是单内核,内核运行于单独的内核地址空间上。但借鉴微内核,采用模块化设计、抢占式内核、支持内核线程及动态装载内核模块的能力,所有事情都运行在内核态,直接调用函数,无需消息传递。
3. Linux与Unix的差异
Linux动态加载内核模:块动态卸除和加载部分内核代码
Linux支持对称多处理(SMP)机制
Linux内核支持抢占:允许在内核运行的任务优先执行的能力,Unix里只有Solaris和IRIX支持抢占
支持线程,但不区分线程和进程
Linux提供具有设备类的面向对象的设备模型、热插拔事件及用户的设备文件系统(sysfs)
忽略Unix的某些拙劣特性
自由
5. 多任务系统分为:非抢占式多任务和抢占式多任务(区别)(抢占如何发生)
Linux提供了抢占式的多任务模式,在此模式下,由调度程序来决定什么时候停止一个进程的运行以便其他进程能够得到执行机会。这个强制的挂起动作就叫做抢占(preemption)。进程在被抢占之前能够运行的时间是预先设置好的,而且有一个专门的名字,叫进程的时间片(timeslice)。时间片实际上就是分配给每个进程的处理器时间段。有效管理时间片能使调度程序从系统全局的角度做出调度决定,这样做还可以避免个别进程独占系统资源。
非抢占式多模式下,除非进程自己主动停止运行,否则它会一直执行。
6. 策略:决定调度程序在何时让什么进程运行
进程分类:I/O消耗型和处理器消耗型的进程
I/O消耗型:进程大部分时间用来提交I/O请求或等待I/O请求 例:用户图形界面程序属于I/O密集型
处理器消耗型:多数时间用在执行代码上。例:执行数学计算的程序,如MATLAB
调度策略的目的:进程响应迅速和最大系统利用率
Linux为了保证交互式应用,更倾向于优先调度I/O消耗型进程。
7. Linux采用两种不同的优先级范围
nice值,-20~+19,nice值越大意味着优先级越低,获得处理器的时间越少。Linux中, nice值代表时间片的比例,PS –el命令结果中标记NI的一列就是进程对应的nice值
实时优先级:0~99,越高的实时优先级数值进程优先级越高。任何实时进程的优先级都高于普通的进程。
8. 时间片
定义:时间片是一个数值,它表明进程在被抢占前所能持续运行的时间。调度策略必须规定一个默认的时间片
时间片过长:导致系统对交互的响应表现欠佳;
时间片太短:会明显增大进程切换带来的处理器耗时。
没有时间片的进程不会再投入运行,除非等到其它所有的进程都耗尽了它们的时间片,这时,会重新计算所有进程的时间片
当一个进程的时间片耗尽时,就认为进程到期了。
Linux将处理器的使用比划分给进程,即进程所获得的处理时间和系统负载相关,同时也受nice的影响
I/O消耗型不需要长的时间片,而处理器消耗型正相反
9. 进程抢占
两种情况下会发生进程抢占:
有一个进程进入TASK_RUNNING状态,而它的优先级高于当前正在运行的进程
当正在运行的进程的时间片变为0时
10. CFS算法(非实时)
准确计算每个进程在全部可运行进程中所占比例的时间片,CFS为多任务设立无限小的调度周期,称为目标延迟。越小的调度周期交互性越好,切换代价越高及系统总吞吐能力越差
当可运行任务数量趋于无限时,CFS引入每个进程获得的时间片的最小粒度,默认值为1ms
绝对的nice值不再影响调试策略,相对的nice值影响处理器时间的分配比例
11. 实时调度策略
SCHED_FIFO:实时调度策略,先到先服务。一旦占用cpu则一直运行。一直运行直到有更高优先级任务到达或自己放弃
SCHED_RR:实时调度策略,时间片轮转。当进程的时间片用完,系统将重新分配时间片,并置于就绪队列尾。放在队列尾保证了所有具有相同优先级的RR任务的调度公平Linux线程优先级设置
12. POSIX
POSIX是Unix中最流行的应用编程接口,由IEEE的一组标准组成。目标是提供基于Unix的可移植操作系统标准
14. Linux内核中的实现(理解内核链表方式使用的不同)
Linux内核方式不是将数据结构塞入链表,而是将链表节点塞入数据结构,链表的实现要依据官方内核链表实现
15. 映射
映射:关联数组,由唯一键组成的集合,每个键必然关联一个特定的值,这种键到值的关联关系称为映射。映射支持三种操作:
Add (key, value)
value = Lookup (key)
Remove (key)
Linux映射的目标:映射一个唯一标识数(UID)到一个指针。映射命名为idr
16. 中断(如何产生)
中断使硬件发出通知给处理器,中断本质是一种特殊的电信号,由硬件设备发向处理器。处理器收到中断后,会马上向操作系统反映此信号的到来,然后就由操作系统负责处理这些新到来的数据,中断随时产生,内核随时可能因为新到来的中断而打断。
不同的设备对应的中断不同,每个中断由唯一的数字标识。从而,操作系统对中断进行区分,为不同的中断提供不同的中断处理程序
17. 共享的中断处理程序
共享与非共享的处理程序的差异:
request_irq()的参数flags必须设置SA_SHARED标志;
对每个注册的中断处理程序来说,dev参数必须唯一。指向任一设备结构的指针就可以满足这一要求;通常会选择设备结构,因为它是唯一的,而且中断处理程序可能会用到它。不能给共享的处理程序传递NULL值。
中断处理程序必须能够区分它的设备是否真的产生了中断。这既需要硬件的支持,也需要处理程序中相关的处理逻辑。如果硬件不支持这一功能,那中断处理程充就无法知道与它对应的设备发出了这个中断。还是共享这条中断的其他设备发出了这个中断。
18. 中断处理机制的实现
19. 临界区和竞争条件
临界区:访问和操作共享数据的代码段。
竞争条件:两个执行线程处于同一临界区中同时执行,存在线程竞争。
同步:避免并发和防止竞争条件称为同步
20. 单个变量
全局整形变量i,执行的操作为i++,其机器指令序列:
21. 文件系统
文件系统是数据分层存储结构,包含文件、目录和相关的控制信息。通用操作包含创建、删除和安装等。
文件系统被安装在一个特定的安装点上,该安装点在全局层次结构中称为命名空间,已安装文件系统作为根文件系统树的枝叶。类Unix操作采取单一、统一的树形管理文件系统
22. VFS有四个主要的对象类型:
超级块对象,代表一个具体的已安装文件系统
索引节点对象,代表一个具体文件
目录项对象,代表一个目录项,是路径的一个组成部分
文件对象,代表由进程打开的文件
23. I/O调度程序与进程调度程序的区别
进程调度程序是将处理器资源分配给系统的运行进程
I/O调度程序虚拟块设备给多个磁盘请求,以降低磁盘寻址时间,确保磁盘性能的最优化
24. 内核模块与应用程序对比
应用程序是一个进程
编程从主函数main()开始
主函数main返回即是进程结束
使用glibc的库
驱动程序是一系列内核函数
函数入口和出口不一样
使用Linux内核的函数
这些函数由内核在适当的时候来调用
这些函数可以用来完成硬件访问等操作