Linux设计与实现学习笔记之进程调度

进程调度


这一章讲的内容是非常有趣的,很多的思想和观点生活中也能用到呢。这一章最重要的两个字是调度。何为调度,就是在有限的处理器和无限的进程中寻找平衡点的策略,方法。调度的目的:最大限度地利用处理器。调度的原则:高效,公平。


多任务系统的两种方式:抢占式多任务和非抢占式多任务。非抢占式多任务有点像计划经济,每个进程占用CPU资源完全靠自愿,让步。这样会出现很多分配不公的现象。而抢占式多任务则是市场经济,符合市场规律(调度算法)。这种规律保证了每个进程能相对公平的占用CPU的时间。


几个名词:

抢占:抢占式多任务系统中出现的概念。正在运行的进程被调度程序强制挂起,以便新的进程得到执行的机会。这个动作叫做抢占。

时间片:进程在被抢占之前已经预设好的时间。


Linux进程调度发展简史:

2.4版本及以前:简陋的进程调度

2.5版本:O(1)调度,对交互式进程不理想。

2.6版本:CFS


Linux进程调度策略:

进程分为两类:I/O消耗型进程和处理器消耗型进程。前者是说像GUI这种大部分时间需要等待键盘,鼠标等外设的输入,并且要及时处理并给予响应的进程。后者是说一些执行算法的程序,需要大量的耗费CPU.当然这两个只是对进程特性的描述,很多进程是兼而有之的。

了解了进程的分类,调度策略就是要在上面两个矛盾中寻找平衡,这也是整个调度程序最核心的工作。


进程的优先级:

事实上天底下没有完全的公平,人有美丑富穷,进程也分了三流九等。进程调度程序要保证的也是相对的公平,而不是绝对的公平。如何区分进程的优先级呢,Linux是采用了两个方法:第一种是nice值,它的范围是-20~19,nice值越大,优先级越低。nice值代表时间片的比例,而不是绝对值。通过ps -el命令可以看到标记为NI的一列,这就是这个进程的nice值。第二张就是实时优先级,这是实时进程才有的。事实上这地方比较复杂,优先级里面有区分为静态优先级和动态优先级,这里MARK一下,回头再研究。


时间片:

一个矛盾:时间片分配的过长,系统对交互系统的响应表现欠佳。时间片分配的太短,又会增大进程切换的消耗。如何定义时间表的长度,恒定的值是有问题的。CFS调度器没有直接分配时间片带进程,而是将处理器的使用比分给了进程。这样,进程被分配的时间片是动态的,与系统的负载以及分配的nice值有关系。


抢占时机:

调度器会比较新的进程和正在运行的进程消耗了多少CPU占用比,如果新的进程使用比比当前进程小,则新进程立刻投入运行,否则推迟运行。


文本编辑器和播放器的例子:

两个进程,一个文本编辑器(I/O消耗型进程),一个播放器(处理器消耗型)。两个进程被赋予相同的nice值,具有相同的处理器使用比(假设都是50%)。当文本编辑器被唤醒时,CFS注意带给他的处理器使用比是50%,但是他用的和少。跟据上面的原则,文本编辑器进程胡立即抢占播放器进程,并进程处理。处理完成后,文本编辑器进入休眠模式,播放器继续进行处理。这样就保证了公平。








  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是关于《Linux内核设计实现》的笔记: 1. 进程管理 - 进程控制块(Process Control Block, PCB):一个进程在内核中的表示,包含了进程的状态、各种计数器和指针,以及进程所需要的资源。 - 进程调度:内核必须在可能的情况下公平地分配CPU时间片给每个进程。Linux内核使用完全公平调度(Completely Fair Scheduler, CFS)来实现这一点。 - 进程同步:进程在访问共享资源时需要同步,以避免冲突。Linux内核提供了多种同步机制,如信号量、自旋锁和读写锁等。 2. 内存管理 - 虚拟内存:每个进程都拥有自己的虚拟内存空间,这使得每个进程都可以认为自己独占整个系统内存。 - 页面置换:当物理内存不足时,Linux内核会使用页面置换算法将一部分未使用的页面从物理内存中移出,以便为正在运行的进程腾出空间。 - 内存映射文件:Linux允许将磁盘上的文件映射到进程的虚拟地址空间中,这样就可以像访问内存一样访问文件。 3. 文件系统 - 虚拟文件系统(Virtual File System, VFS):Linux内核中的抽象层,它允许系统支持多种文件系统格式,如ext4、FAT32等。 - I/O管理:内核必须管理所有的I/O操作,包括磁盘读写和网络通信等。 - 文件描述符:Linux内核使用文件描述符来标识打开的文件,每个进程都有一个文件描述符表。 4. 网络协议栈 - TCP/IP协议栈:Linux内核支持多种网络协议,其中最常用的是TCP/IP协议栈。 - Socket:在Linux中,进程之间通信的主要方式是使用Socket。Socket是一种抽象的概念,它代表了一个网络连接。 5. 设备驱动程序 - 驱动程序开发:Linux内核的设备驱动程序通常是以模块的形式开发的,它们可以动态地加载和卸载。 - 设备文件:Linux内核将设备表示为文件,它们可以通过文件系统接口来访问。 以上是《Linux内核设计实现》的一些重点内容和笔记,希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值