Loading

复习笔记|第七章 Linux进程管理《操作系统原理教程》

参考教材:《操作系统原理教程(第4版)》刘美华 翟岩龙著

大纲问题回答(精简版)

1. 进程控制块,其中与进程管理、存储器管理和文件管理有关的一些字段,线程组标识符。

task_struct
thread_info 当前进程基本信息
mm_struct 指向进程的虚拟内存描述符
thread_struct 保存进程硬件上下文
files_struct 指向该进程打开文件信息
signal_struct 所接收的信号
tgid 线程组标识符,线程组领头进程的PID

2. 与进程创建有关的函数:fork( )、vfork( )、clone( )。

◼ 创建子进程函数fork():创建成功之后,子进程采用写时复制技术读共享父进程的全部地址空间,仅当父或子要写一个页时,才为其复制一个私有的页的副本。
◼ 创建轻量级进程函数clone():实现对多线程应用程序的支持。共享进程在内核的很多数据结构,如页表、打开文件表等等。
◼ vfork():阻塞父进程直到子进程退出或执行了一个新程序为止。

3. 理解进程切换的过程。涉及到页目录表、核心栈、硬件上下文。

◼ 进程切换:第一步,切换页目录表以安装一个新的地址空间;第二步,切换核心栈和硬件上下文(即必须装入CPU寄存器的一组数据)。

4. 进程调度方式。进程调度时机。

◆可抢先式的动态优先级调度方式
Linux进程调度
◼ 系统采用可抢先式的动态优先级调度方式。无论进程处于用户态还是核心态运行,都可能被抢占CPU
◼ 实时进程的基本优先数为1~99,而分时进程和批处理进程的基本优先数为100~139。
进程调度所涉及的数据结构
◼ 每个处理机都有自己的可运行进程队列,存放在一维数组runqueues中。每个处理机对应数组中的一项。P158-159
活动进程链表:没有用完自己的时间片。
过期进程链表:已经用完了自己的时间片。
◼ 当活动进程都过期后,过期进程才可运行。避免低优先级进程没有机会运行(进程饥饿)。
活动进程有140个优先级队列,和队列位图。过期进程也有140个优先级队列,和队列位图。

普通进程是兼顾基本时间片和动态优先级的调度。发生实时进程调度的时机:
① 出现了更高优先级的实时进程。
② 进程执行了阻塞操作而进入睡眠状态。
③ 进程停止运行或被杀死。
④ 进程调用sched_yield()自愿放弃处理机。
⑤在基于时间片轮转的实时进程调度中,进程用完了自己的时间片。

5. Linux有很多内核线程,了解0号进程和1号进程的作用。

◆0号进程就是一个内核线程,0号进程是所有进程的祖先进程。每个CPU都有一个0号进程。
◆1号进程是由0号进程创建的内核线程init,负责完成内核的初始化工作。
◼ 0号进程就是一个内核线程,0号进程是所有进程的祖先进程,又叫idle进程或叫做swapper进程。每个CPU都有一个0号进程。
1号进程是由0号进程创建的内核线程init,负责完成内核的初始化工作。在系统关闭之前,init进程一直存在,它负责创建和监控在操作系统外层执行的所有用户态进程

大纲问题回答

1. 进程控制块(2),其中与进程管理、存储器管理和文件管理有关的一些字段,线程组标识符。

进程控制块,又称进程描述符(task_struct)
thread_info 当前进程基本信息
mm_struct 指向进程的虚拟内存描述符
thread_struct 保存进程硬件上下文
files_struct 指向该进程打开文件信息
signal_struct 所接收的信号
tgid 线程组标识符,线程组领头进程的PID

2. 与进程创建有关的函数:fork( )、vfork( )、clone( )。(3)

创建子进程函数fork():创建成功之后,子进程采用写时复制技术读共享父进程的全部地址空间,仅当父或子要写一个页时,才为其复制一个私有的页的副本
◼ 创建轻量级进程函数clone():实现对多线程应用程序的支持。共享进程在内核的很多数据结构,如页表、打开文件表等等。
◼ vfork():阻塞父进程直到子进程退出或执行了一个新程序为止

3. 理解进程切换的过程。涉及到页目录表、核心栈、硬件上下文。(5)

◼ 进程切换:第一步,切换页目录表以安装一个新的地址空间;第二步,切换核心栈和硬件上下文(即必须装入CPU寄存器的一组数据)。由schedule()函数完成进程切换。
进程切换只发生在核心态。在发生进程切换之前,用户态进程使用的所有寄存器值都已被保存在进程的核心栈中。
进程硬件上下文存放在进程描述符的thread_struct thread中。

4. 进程调度方式。进程调度时机。(1)

可抢先式的动态优先级调度方式
Linux进程调度
◼ 系统采用可抢先式的动态优先级调度方式。无论进程处于用户态还是核心态运行,都可能被抢占CPU。
◼ 实时进程的基本优先数为1~99,而分时进程和批处理进程的基本优先数为100~139。
进程调度所涉及的数据结构
◼ 每个处理机都有自己的可运行进程队列,存放在一维数组runqueues中。每个处理机对应数组中的一项。P158-159
◼ 活动进程链表:没有用完自己的时间片。
◼ 过期进程链表:已经用完了自己的时间片。
◼ 当活动进程都过期后,过期进程才可运行。避免低优先级进程没有机会运行(进程饥饿)。
活动进程有140个优先级队列,和队列位图。过期进程也有140个优先级队列,和队列位图。

普通进程是兼顾基本时间片和动态优先级的调度。发生实时进程调度的时机:
① 出现了更高优先级的实时进程。
② 进程执行了阻塞操作而进入睡眠状态。
③ 进程停止运行或被杀死。
④ 进程调用sched_yield()自愿放弃处理机。
⑤在基于时间片轮转的实时进程调度中,进程用完了自己的时间片
注:

1670244594541-5c5b1d60-b5af-49a9-a5c9-219b23881cea.png
以上除了进程调度都是进程调度的时机。以上由运行态到就绪态可能是时间片用完了(时间片轮转法)或者更高优先级的进程来了(优先级调度法),到终止态可能是被杀死或者由于某种错误终止运行,也有可能是执行了阻塞或者唤醒原语。唯一多的是调用sched_yield()自愿放弃处理机。

5. Linux有很多内核线程,了解0号进程和1号进程的作用。

0号进程就是一个内核线程,0号进程是所有进程的祖先进程。每个CPU都有一个0号进程。
1号进程是由0号进程创建的内核线程init,负责完成内核的初始化工作
◼ 0号进程就是一个内核线程,0号进程是所有进程的祖先进程,又叫idle进程或叫做swapper进程。每个CPU都有一个0号进程。
◼ 1号进程是由0号进程创建的内核线程init,负责完成内核的初始化工作。在系统关闭之前,init进程一直存在,它负责创建和监控在操作系统外层执行的所有用户态进程。

posted @ 2023-08-07 13:54  LateSpring  阅读(133)  评论(0编辑  收藏  举报