操作系统课堂笔记(2023.3.7-3.9)

操作系统课堂笔记(2023.3.7)

主要关于第二章进程和线程的部分知识

2023.3.9

第二章课后习题答案

7.

进程创建是操作系统中的一个重要概念,它指的是在操作系统中创建一个新的进程来运行一个应用程序或服务。主要引起进程创建的事件有以下几种:

  1. 用户请求创建新进程:这是最常见的引起进程创建的事件之一。当用户启动一个应用程序或服务时,操作系统会创建一个新的进程来运行该程序或服务。

  1. 系统自动创建进程:操作系统也可以自动创建进程来执行某些任务,如处理外部事件(如中断或信号),执行定时任务或执行后台进程等。

  1. 父进程创建子进程:在操作系统中,进程可以通过创建子进程来实现并发执行。父进程可以通过调用系统调用(如fork())来创建一个新的子进程,并将其运行在一个新的地址空间中。

  1. 线程创建进程:在一些操作系统中,线程可以创建新的进程来并发执行不同的任务。线程可以调用系统调用(如CreateProcess())来创建新的进程。

总的来说,主要引起进程创建的事件包括用户请求创建新进程、系统自动创建进程、父进程创建子进程和线程创建进程等。这些事件的发生会导致操作系统创建一个新的进程来执行相应的任务。

8.

当操作系统需要创建一个新的进程时,它需要完成以下主要工作:

  1. 分配进程控制块(PCB):操作系统需要为新的进程分配一个独立的PCB,用于保存进程的相关信息,如进程ID、进程状态、进程优先级、程序计数器、堆栈指针等。

  1. 分配地址空间:操作系统需要为新的进程分配一个独立的地址空间,用于存放进程的代码、数据和堆栈等。操作系统需要将代码和数据从可执行文件中读取到内存中,并设置堆栈指针和堆栈大小等信息。

  1. 加载可执行文件:操作系统需要从磁盘中读取可执行文件,并将其加载到进程的地址空间中。加载可执行文件通常包括读取文件头信息、分配内存空间、拷贝代码和数据等步骤。

  1. 设置进程上下文:操作系统需要为新的进程设置初始的上下文环境,包括设置进程的初始状态、堆栈指针、程序计数器等。

  1. 将进程加入就绪队列:操作系统需要将新的进程加入就绪队列,等待CPU的调度执行。在加入就绪队列之前,操作系统需要将进程的状态设置为就绪状态。

总的来说,当操作系统创建一个新的进程时,它需要完成分配进程控制块、分配地址空间、加载可执行文件、设置进程上下文和将进程加入就绪队列等主要工作。这些工作完成后,新的进程可以开始执行,并等待CPU的调度。

16.

在操作系统中引入线程的主要目的是为了实现更高效的并发执行。在传统的单线程模型中,程序的执行是按照顺序执行的,当程序执行一个长时间的操作时,整个程序的执行就会被阻塞。而引入线程后,程序可以在同一个进程中同时执行多个线程,从而实现更高效的并发执行。

引入线程还可以带来以下好处:

  1. 提高系统的响应速度:在一个多线程的程序中,线程可以在执行长时间操作时,让其他线程继续执行,从而提高系统的响应速度。

  1. 提高系统的并发度:多线程程序可以在同一时间内执行多个任务,从而提高系统的并发度,更好地利用系统资源。

  1. 简化编程模型:线程可以让程序更容易编写,因为程序员可以将复杂的程序拆分成多个简单的线程,并让它们并发执行。

  1. 提高可靠性:使用多线程可以让程序更加健壮,因为在某些线程出现问题时,其他线程仍然可以继续执行,从而保证了程序的可靠性。

总的来说,引入线程可以提高系统的并发度、响应速度和可靠性,同时也可以简化编程模型,使程序更容易编写和维护。因此,在操作系统中引入线程是一个重要的技术。

21

从调度、并发、拥有资源和系统开销这四个方面对传统进程和线程进行比较:

  1. 调度:线程调度比进程调度更加轻量级,因为线程共享进程的资源,所以线程切换的开销比进程切换的开销小得多。此外,线程调度可以更加灵活和快速,因为在同一个进程中的线程之间切换只需要切换上下文信息,而不需要进行页表切换等复杂操作。

  1. 并发:由于线程共享进程的资源,因此线程的并发性更高。在同一个进程中,多个线程可以并行执行不同的任务,从而提高系统的整体并发性。而传统进程之间的并发性较低,因为每个进程都有自己的地址空间和资源,进程之间需要通过进程间通信才能进行数据交换和协作。

  1. 拥有资源:传统进程拥有自己的地址空间和资源,包括文件描述符、信号量、共享内存等,因此进程之间的资源隔离性更好。而线程共享进程的资源,因此线程之间的数据共享和协作更加方便,但也需要进行同步和互斥操作以避免数据竞争。

  1. 系统开销:由于进程拥有自己的地址空间和资源,因此进程的创建、销毁和切换的开销比线程大。而线程共享进程的地址空间和资源,因此线程的创建和切换的开销比进程小得多。此外,线程之间的通信和同步也比进程之间更加高效。

综上所述,线程比传统进程在调度、并发、系统开销方面更具优势,但在拥有资源方面较劣。因此,在实际应用中需要根据具体的场景和需求选择合适的进程或线程来进行开发和设计。

22

(1) 为支持多进程的并发执行,系统必须建立以下关于进程的数据结构:

  1. 进程表:保存系统中所有进程的信息,包括进程标识符、状态、优先级、程序计数器、堆栈指针等。操作系统可以根据进程表中的信息来管理进程的状态和资源。

  1. 就绪队列:保存所有就绪状态的进程,以便操作系统可以从中选择一个进程来执行。

  1. 阻塞队列:保存所有阻塞状态的进程,以便操作系统可以在满足条件时将其唤醒。

  1. 内存管理表:保存系统中所有进程使用的内存信息,包括进程占用的内存空间、虚拟地址空间等。操作系统可以根据内存管理表来分配和管理系统内存资源。

(2) 为支持进程状态的变迁,系统至少应提供以下进程控制原语:

  1. 进程创建:创建新的进程并分配资源。

  1. 进程终止:释放进程占用的资源并从系统中删除进程。

  1. 进程阻塞:将进程从就绪队列中移除并设置为阻塞状态,等待事件发生。

  1. 进程唤醒:将阻塞状态的进程设置为就绪状态,以便可以被调度执行。

  1. 进程切换:选择一个就绪状态的进程来执行,并将当前进程状态设置为就绪状态,等待下一次调度。

  1. 进程挂起:暂停进程的执行并保存其状态,以便可以在需要时恢复执行。

  1. 进程恢复:恢复被挂起的进程的执行状态,以便可以继续执行。

(3)

在执行每一个进程控制原语时,进程状态和相应的数据结构会发生以下变化:

  1. 创建进程:在执行进程创建原语时,操作系统会为新进程分配资源,并将其添加到系统进程表中。此时,新进程的状态为就绪状态,等待被调度执行。

  1. 终止进程:在执行进程终止原语时,操作系统会将进程从进程表中移除,并释放进程占用的资源。此时,进程状态变为终止状态。

  1. 阻塞进程:在执行阻塞原语时,操作系统会将进程从就绪队列中移除,并将其状态设置为阻塞状态,等待事件发生。

  1. 唤醒进程:在执行唤醒原语时,操作系统会将阻塞的进程状态设置为就绪状态,并将其重新加入就绪队列中。

  1. 切换进程:在执行进程切换原语时,操作系统会选择另一个就绪状态的进程执行,并将当前进程的状态设置为就绪状态,等待下一次调度。

相应的数据结构也会发生相应的变化。例如,进程表中的进程状态会根据执行的原语而发生变化;就绪队列中的进程数量会随着进程的阻塞和唤醒而变化;资源分配表中的资源状态会随着进程的创建和终止而变化等。

总之,在操作系统中,进程控制原语对进程状态和相关数据结构进行管理和调度,从而实现多进程的并发执行。

2023.3.15

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值