345---进程管理、进程调度、系统调用

进程的定义是什么?

进程是处于执行期的程序以及相关资源的总称,是正在执行的程序代码的实时结果,也称任务。对操作系统来说是程序运行状态的表现形式。

进程相关资源有哪些?

挂起的信号、内核内部数据、处理器状态和打开的文件都是进程的资源。 

什么线程?

线程是在进程中活动的对象,内核调度的是线程。是一种耗费资源更少,运行更迅速的执行单元。

线程的组成部分有哪些?

一个独立的程序计数器、进程栈和一组进程寄存器。

线程与进程的关系是什么?

对Linux而言,线程是一种特殊的进程,它是进程间共享资源的手段。

进程就是程序,程序就是进程吗?

程序本身并不是进程,进程是处于执行期的程序,完全可能存在两个或两个以上的不同的进程执行同一个程序,并且两个或两个以上的进程可以共享诸如打开的文件、地址空间之类的资源。

进程的生命周期从何开始,如何结束?

  • 调用fork()函数通过复制一个现有的进程来创建一个新的进程,由此进程开始存活。
  • 调用exec()函数创建新的地址空间,读取可执行程序并将其载入地址空间开始运行,创建进程。
  • 调用exit()退出执行,释放其占有的资源并通知父进程其子进程被终结。

 什么是内核线程?

独立运行在内核空间的标准进程。

内核线程与普通线程的异同是什么?

相同点是内核线程和普通线程都可以被调度,被抢占。不同点是内核线程没有独立的地址空间,它只在内核空间运行,从不切换到用户空间去。

进程如何存储?数据结构是什么?

内核把进程的列表存放在任务队列,数据结构为双向循环链表。链表中每一项称为进程描述符,类型为task_struct。

进程描述符包含哪些信息?

进程描述符包含一个具体进程的所有信息,能够完整描述一个正在执行的程序,如打开的文件,进程的地址空间,挂起的信号以及进程的状态。

什么是进程上下文?

程序一般在内核空间执行,当一个程序执行了系统调用或触发了某个异常(访问内核的接口),就会转到内核空间执行。此时,我们称内核处于进程上下文。

处于进程上下文,内核有哪些特性?

处于进程上下文内核可以睡眠可以被抢占

如何描述各个进程之间的关系?

进程之间存在继承关系,所有进程都是PID为1的init进程的后代。系统中的每个进程必有一个父进程,同时,会拥有零个或多个子进程,拥有同一个父进程的所有进程称为兄弟。在进程描述符中,每个task_struct包含一个parent指针指向父进程的task_struct,还包含一个children的子进程链表。

孤儿进程是如何产生的?

当父进程在子进程之前退出,又没有为子进程找到一个新的父进程,就会产生孤儿进程。

孤儿进程会造成什么后果,如何解决?

孤儿进程在退出时会处于僵死状态,耗费内存资源。解决方法是为孤儿进程找一个进程作父亲,或者让init作为它的父进程。

什么是进程调度程序?

在可运行进程之间分配有限的处理器时间资源的内核子系统。

进程调度程序有什么作用?

决定哪个进程什么时候可以运行以及运行时间长短,保证进程有效工作、系统资源利用最大化。

什么是多任务操作系统?

能同时并发执行多个任务的操作系统称为多任务操作系统。能够使多个进程处于堵塞或睡眠状态。

多任务操作系统有哪两类?

抢占式多任务和非抢占式多任务

抢占式多任务与非抢占式多任务区别是什么?

  • 抢占式多任务由进程调度程序决定什么时候停止一个进程的运行,这种进程被强制挂起的操作称为抢占。
  • 非抢占式多任务由进程自己主动停止运行,这种进程主动挂起的操作称为让步。

什么是时间片?

进程在被抢占前所能持续运行的时间,是预先分配给可运行进程的处理器时间段。

时间片的长短有什么影响?

时间片过长会导致系统交互响应不佳,时间片过短会导致进程间切换浪费资源。

调度策略有什么作用?

调度策略决定调度程序在何时让什么进程开始执行,负责优化使用处理器的时间。

进程的分类及特点?

IO消耗型进程:进程通常处在提交或者等待IO请求的运行状态,运行时间短。

CPU消耗型进程:进程通常在执行代码,除非被抢占,否则一直运行。

根据什么来划分进程的优先级?

进程的价值和其对处理器的时间需求。

什么是基于进程优先级的调度算法?

先执行优先级较高的进程,相同优先级的进程采用轮转方式调度。用户和系统可以设置进程的优先级来影响进程的调度。

CFS调度算法的组成部分?

  • 时间记账
  • 进程选择
  • 调度器入口
  • 睡眠和唤醒

什么情况下会发生用户抢占?

  • 从系统调用返回用户空间时
  • 从中断处理程序返回用户空间时

内核可以被抢占的条件是什么?

锁是非抢占区标志,如果没有持有锁,正在执行的代码就是可重新导入的,就可以被抢占。

什么情况下可以进行内核抢占?

  • 中断处理程序正在执行,且返回内核空间之前
  • 内核代码没有持有锁,处于可被抢占状态
  • 内核中的任务显式调用schedule( )
  • 内核中的任务被阻塞,间接调用schedule( )

什么是系统调用?

在用户空间进程和硬件设备之间的一个中间层。

系统调用有什么作用?

  • 为用户空间提供了一种硬件的抽象接口
  • 保证了系统的稳定和安全

如何访问系统调用?

通过C库中定义的函数来进行访问

如何定义系统调用函数?

  • 形如asmlinkage long sys_getpid( )
  • 系统调用的限定词asmlinkage。是一个编译指令
  • 系统调用在内核空间的返回值为long,在用户空间的返回值为int
  • 系统调用的命名规则sys_xxx()

什么是系统调用号?

每个系统调用被赋予一个独一无二的系统调用号且不会变更,当系统调用被删除时,系统调用号也不会被回收再利用。

系统调用号的作用是什么?

进程在执行系统调用时,系统调用号会指明进程执行的是哪一个系统调用。

为什么Linux系统调用比其他操作系统执行的快?

  • Linux进程上下文切换时间短
  • 系统调用处理程序代码简洁

如何执行系统调用处理程序?

内核驻留在受保护的地址空间,当用户空间应用程序无法直接调用内核中的程序。应用程序会引发一个异常(软中断)使系统切换到内核态执行系统调用处理程序。

如何根据系统调用号指定某一个系统调用?

在切换到内核态之前,系统调用号被放入eax寄存器中,当系统调用程序开始执行时,从eax寄存器中取出数据。

系统调用如何传递参数和返回值?

同系统调用号类似,采用寄存器传递参数和返回值。

猜你喜欢

转载自blog.csdn.net/weixin_42415578/article/details/83783317