Linux内核分析第四章 读书笔记

Linux内核分析第四章 读书笔记

第一部分--进程调度

进程调度:操作系统规定下的进程选取模式

面临问题:多任务选择问题

多任务操作系统就是能同时并发地交互执行多个进程的操作系统,在单处理器机器上这会产生多个进程在同时运行的幻觉,在多处理器机器上,这会使多个进程在不同的处理机上真正同时、并行地运行。无论在单处理器或者多处理器机器上,多任务操作系统都能使多个进程处于堵塞或者睡眠状态,也就是说,实际上不被投入执行,直到工作确实就绪。

多任务系统可以划分为两类:非抢占式多任务和抢占式多任务。Linux提供了抢占式的多任务。

策略选择:

一般选择任务方式可以分为:当一个进程正在运行时,系统可以基于某种原则,剥夺已分配给它的处理机,将之分配给其它进程。剥夺原则有:优先权原则、短进程优先原则、时间片原则。

优先级:每个任务进程都有自己的进入等级,高者先行进入

时间片:根据基本时间单位来选择进程

通常linux将他们进行结合运用

算法提供:

先进先出算法:算法总是把处理机分配给最先进入就绪队列的进程,一个进程一旦分得处理机,便一直执行下去,直到该进程完成或阻塞时,才释放处理机。

短进程优先:最短CPU运行期优先调度算法,该算法从就绪队列中选出下一个“CPU执行期最短”的进程,为之分配处理机。

轮转法:在分时系统中,都采用时间片轮转法。简单轮转法:系统将所有就绪进程按FIFO规则排队,按一定的时间间隔把处理机分配给队列中的进程。这样,就绪队列中所有进程均可获得一个时间片的处理机而运行。多级队列方法:将系统中所有进程分成若干类,每类为一级。

linux通常使用公平性算法:

CFS算法:需要选择下一个运行进程时,它会挑一个具有最小vruntime的进程,这其实就是CSF调度算法的核心:选择具有最小、vruntime的任务。那么剩下的内容我们就来讨论到底是如何实现选择具有最小、vruntime值的进程。Linux中,红黑树称为rbtree,它是一个自平衡二叉搜索树,红黑树是一种以树节点形式存储的数据,这些数据都会对应一个键值,我们可以通过这些键值来快速检索节点上的数据

选择结构为红黑树,节点为最小节点

第二部分--进程的上下文切换

进程上下文切换:在操作系统中,CPU切换到另一个进程需要保存当前进程的状态并恢复另一个进程的状态:当前运行任务转为就绪(或者挂起、删除)状态,另一个被选定的就绪任务成为当前任务。上下文切换包括保存当前任务的运行环境,恢复将要运行任务的运行环境。

用进程的PCB也称为PCB,即任务控制块表示,它包括进程状态,CPU寄存器的值等。

通常通过执行一个状态保存来保存CPU当前状态,然后执行一个状态恢复重新开始运行。

在三种情况下可能会发生上下文切换:中断处理,多任务处理,用户态切换。在中断处理中,其他程序”打断”了当前正在运行的程序。当CPU接收到中断请求时,会在正在运行的程序和发起中断请求的程序之间进行一次上下文切换。在多任务处理中,CPU会在不同程序之间来回切换,每个程序都有相应的处理时间片,CPU在两个时间片的间隔中进行上下文切换。对于一些操作系统,当进行用户态切换时也会进行一次上下文切换,虽然这不是必须的。

Linux的实时调度算法提供了―种软实时工作方式,软实时的含义是,内核调度进程,尽力使进程在它的限定时间到来前运行,但内核不保证总能满足这些进程的要求。相反,硬实时系统保证在一定条件下,可以满足任何调度的要求。Linux对于实时任务的调度不做任何保证。

与调度相关的系统调用:

1 与调度策略和优先级相关的系统调用

2 与处理器绑定有关的系统调用

3 放弃处理器时间

总结:

对于我们关于进程调度,基本的思想就是怎么有限的资源尽最大能力利用,使用的手段有助于我们解决问题,进程调度的方式也是计算机操作系统不可避免的问题,我们可以假设CPU就是我们的日常生活中的资金,怎样更好的支出与收入直接影响到我们的日常生活,进程调度的方向我认为现在在于扩大CPU的总操作量的同时,引入一个审核机构,进行判断进程的需求度与可以利用资源的最小空间,把不需要恢复或者作用不大的部分给予上下文恢复与保存,或者对进程间相似部分进行替换即可,可以引入更小的操作单位,向线程,在进程共同应用的时候,将其保留一份提供给2个进程来达到共享的目的。

时间: 2024-12-12 17:19:12

Linux内核分析第四章 读书笔记的相关文章

linux内核分析 第八周读书笔记

第四章 进程调度 4.1 多任务 1.多任务操作系统就是能同时并发的交互执行多个进程的操作系统. 2.多任务操作系统使多个进程处于堵塞或者睡眠状态,实际不被投入执行,这些任务尽管位于内存,但是并不处于可运行状态. 3.多任务系统分类: (1)非抢占式多任务 (2)抢占式多任务 4.Linux提供了抢占式的多任务模式.在此模式下,由调度程序来决定什么时候停止一个进程的运行,以便其他进程能够得到执行机会.这个强制的挂起动作叫做抢占.进程被抢占之前能够运行的时间是预先设置好的,叫进程的时间片.时间片实

linux内核分析 第六周读书笔记

第三章 进程管理 3.1 进程 进程:处于执行期的程序 线程是在进程活动中的对象:内核调度的对象是线程而不是进程,在Linux系统中,并不区分线程和进程 在现代操作系统中, 进程提供两种虚拟机制:虚拟内存器和虚拟内存. 进程在创建它的时刻开始存活,这通常是调用fork系统的结果.该系统调用通过复制一个现有进程来创建一个全新的进程.fork系统调用从内核返回两次,一次到父进程,另一次回到新产生的子进程. 通常,创建新的进程都是为了立即执行新的不同的程序,而接着调用exec()这组函数就可以创建新的

《Linux内核设计与实现》读书笔记——第一二章

<Linux内核设计与实现>读书笔记——第一二章 第一章 Linux内核简介 1.1 Unix的历史 简洁:仅提供系统调用并有一个非常明确的设计目的. 抽象:Unix中绝大部分东西都被当做文件,这种抽象使对数据和对设备的操作是通过一套相同的系统调用接口来进行的(open().read().write().lseek().close()). 可移植:使用C语言编写,使其在各种硬件体系架构面前都具备令人惊异的移植能力. 进程创建迅速:有独特的fork()系统调用,一次执行保质保量地完成一个任务.简

Android深度探索——第四章读书笔记及心得

源代码的下载及编译 ——第四章读书笔记及心得 通过阅读书籍知道了Android源代码和Linux源代码的区别,了解了什么是Android移植.知道了Android移植就是Linux内核移植,而Linux内核移植主要就是Linux的驱动移植.为了开发和测试内核环境需要对环境进行搭建,进而知道了如何搭建环境.知道了如何下载Android/Linux源代码及配置Android源代码下载环境(并且知道Android源代码的下载并非一定要将4MB多的东西全部下载,也可以挑选着自己需要的东西下载,,可以利用

第四章读书笔记 进程调度

第四章读书笔记 进程调度 什么是进程调度 现在的操作系统都是多任务的,为了能让更多的任务能同时在系统上更好的运行,需要一个管理程序来管理计算机上同时运行的各个任务(也就是进程). 这个管理程序就是调度程序,它的功能说起来很简单: 决定哪些进程运行,哪些进程等待 决定每个进程运行多长时间 此外,为了获得更好的用户体验,运行中的进程还可以立即被其他更紧急的进程打断. 总之,调度是一个平衡的过程.一方面,它要保证各个运行的进程能够最大限度的使用CPU(即尽量少的切换进程,进程切换过多,CPU的时间会浪

Linux内核分析(四)----进程管理|网络子系统|虚拟文件系统|驱动简介

Linux内核分析(四) 两天没有更新了,上次博文我们分析了linux的内存管理子系统,本来我不想对接下来的进程管理子系统.网络子系统.虚拟文件系统在这个阶段进行分析的,但是为了让大家对内核有个整体的把握,今天还是简单的介绍一下剩余的几个子系统,我们对这几个子系统的分析,只要了解其作用和部分内容即可,不必深究,等我们写上几个驱动,到时候按照驱动再来分析这几个子系统我们就清晰多了. 在http://www.cnblogs.com/wrjvszq/p/4257164.html一文我们提到过linux

《Linux内核设计与实现》读书笔记(八)- 中断下半部的处理

在前一章也提到过,之所以中断会分成上下两部分,是由于中断对时限的要求非常高,需要尽快的响应硬件. 主要内容: 中断下半部处理 实现中断下半部的机制 总结中断下半部的实现 中断实现示例 1. 中断下半部处理 那么对于一个中断,如何划分上下两部分呢?哪些处理放在上半部,哪些处理放在下半部? 这里有一些经验可供借鉴: 如果一个任务对时间十分敏感,将其放在上半部 如果一个任务和硬件有关,将其放在上半部 如果一个任务要保证不被其他中断打断,将其放在上半部 其他所有任务,考虑放在下半部 2. 实现中断下半部

《Linux内核设计与实现》读书笔记(十九)- 可移植性

摘自http://www.cnblogs.com/wang_yb/p/3512095.html <Linux内核设计与实现>读书笔记(十九)- 可移植性 linux内核的移植性非常好, 目前的内核也支持非常多的体系结构(有20多个). 但是刚开始时, linux也只支持 intel i386 架构, 从 v1.2版开始支持 Digital Alpha, Intel x86, MIPS和SPARC(虽然支持的还不是很完善). 从 v2.0版本开始加入了对 Motorala 68K和PowerPC

《Linux内核设计与实现》读书笔记(十二)- 内存管理

内核的内存使用不像用户空间那样随意,内核的内存出现错误时也只有靠自己来解决(用户空间的内存错误可以抛给内核来解决). 所有内核的内存管理必须要简洁而且高效. 主要内容: 内存的管理单元 获取内存的方法 获取高端内存 内核内存的分配方式 总结 1. 内存的管理单元 内存最基本的管理单元是页,同时按照内存地址的大小,大致分为3个区. 1.1 页 页的大小与体系结构有关,在 x86 结构中一般是 4KB或者8KB. 可以通过 getconf 命令来查看系统的page的大小: [[email prote