操作系统文档分析

1. 进程与线程

1.1进程的概念

1.2进程与程序的区别和联系

2. 处理机调度

3. 同步与排斥

3.1同步

3.2排斥

4. 死锁

(3) 为了避免所的发生,可以采用以下方法:

扫描二维码关注公众号,回复: 16645883 查看本文章
  1. 进程与线程

1.1进程的概念

  1. 一个具有一定独立功能的程序对某个数据集合上的一次动态执行过程和资源分配过程。
  2. 进程的元素:代码、数据、进程表(进程控制块)Code、Data、PT(PCB)。
  3. 是资源分配的基本单位。
  4. 特性

①动态性:进程数动态的,它的状态随着时间而不断变化。当进程被创建时,它处于就绪状态,等待系统分配资源并将其调度到运行状态。当进程呗调度到运行状态时,它开始执行指令。当进程等待某些事件的发生时(比如等待输入/输出完成),它会进入阻塞状态,等待事件发生。当事件发生后,进程会被唤醒,重新进入就绪状态。

②独立性:每个进程都是独立的,它们不易相互干扰或影响。每个进程都有自己的地址空间,包括代码、数据和堆栈等。进程之间的通信需要通过特定的机制(如共享内存或管道来完成)。

③并发性:在多道程序环境下,多个进程同时运行,每个进程都有自己的独立执行流。由于CPU只能在某个时刻执行一个进程,因此操作系统需要通过调度算法来决定哪个进程优先执行,从而实现进程之间的并发性。

④异步性:由于进程之间的执行速度不同,因此操作系统不能保证每个进程都能按照预期的顺序执行。进程在执行过程中需要等待某些事件发生,如等待I/O操作完成或等待某个信号。这种情况下,操作系统需要提供相应的机制,如信号量或管理,来协调进程之间的执行顺序。

1.2进程与程序的区别和联系

  1. 进程是动态的,程序是静态的。
  2. 进程是暂时的,程序是永久的。
  3. 进程与程序的组成不同

①程序主要包含代码和数据。

②进程除了代码和数据外,还有进程表。

  1. 进程和程序间有非常紧密的联系

①程序经过多次创建,可以对应不同的进程。

②一个程序通过系统调用,可以被多个程序所使用。

(5)处于运行状态的程序称为进程,每个进程运行在自己的空间中,空间相对独立,受操作系统保护,在每个进程空间中,一般都会有一个或者多个线程在运行。

  1. 处理机调度
  1. 是操作系统中中的一个重要组成部分,它的主要作用是根据一定的策略,将系统中的进程分配给可用的处理器,以最大化系统的效率和吞吐量(单位时间内可以完成的任务数量或处理的数据量,是评估系统性能的一个重要指标)。下面是一些处理机调度的常见策略;

①先来先服务调度(FCFS):按照进程到达的先后顺序进行调度,即先到达的进程先进行。

②最短作业服务线调度(SJF):根据进程的预计执行时间进行调度,执行时间短的进程先执行。

③优先级调度:为每个进程分配一个优先级,根据优先级进行调度,优先级高的进程先执行。

④时间片轮转调度:将处理器的时间分成若干个时间片,每个进程在一个时间片内执行一定时间,超过时间片后就被挂起,等待下一轮调度。

⑤多级反馈队列调度:将进程按照优先级分成多个队列,每个队列有不同的时间片大小,优先级高的队列的时间片较短,优先级低的队列时间片较长,当一个进程在一个队列中运行完时间片后,会被移到下一个队列中,直到运行完成。

(2)不同的调度策略适用于不同的场景,操作系统根据实际情况选择最适合的调度策略,以提高系统的效率和吞吐量。

  1. 同步与排斥

3.1同步

当多个进程或线程同时访问共享资源时,就会出现同步问题,例如数据的不一致性、竞争条件和冲突等。为了避免这些问题,需要使用同步机制来协调进程或线程的执行顺序。常见的同步机制如下:

①信号量:可以用来限制并发访问共享资源的数量。信号量包括两种类型:二元信号量和技术信号量。二元信号量只能取两个值,表示是有一个资源可用。计数信号量可以取多个值,表示有多少个资源可用。当一个进程或线程需要访问共享资源时,它会尝试获取信号量,如果信号量的值为零,它就会等待,直到信号量的值变为非零。一旦进程或线程获得了信号量,它就可以访问共享资源。访问完成后,进程或线程需要释放信号量,以便其它进程或线程可以获得信号量继续访问共享资源。

②条件变量:通常与互斥锁一起使用。条件变量可以用来在等待共享资源时挂起进程或线程,并在条件满足时唤醒它们。当一个进程或线程需要访问共享资源时,如果发现资源已经被其它进程或线程占用,那么它可以等待条件变量,当条件变量的条件满足后,等待的进程或线程被唤醒,继续执行。

3.2排斥

保护共享资源,防止多个进程或线程同时访问共享资源,从而避免竞争条件和冲突。排斥机制通常用于保护共享资源的一致性和完整性,以避免数据的不一致性和错误的结果。常见的排斥机制包括互斥锁、读写锁等

①互斥锁:可以保证任何时刻只有一个进程或线程访问共享资源,当有一个进程或线程需要访问共享资源时,它会请求互斥锁,如果锁已经被其它进程或线程持有,那么它就会等待,直到锁被释放位置,一旦进程或线程获得了互斥锁,它就可以安全地访问共享资源。相同的,访问完成后也需要释放资源。

②读写锁:一种常见的排斥机制,它可以在读操作和写操作之间进行区分,以提高并发性能。读操作不需要排斥,多个进程或线程可以同时进行读操作;而写操作需要排斥,只有一个进程或线程可以进行写操作。当一个进程或线程需要进行写操作时,它会请求写锁,如果写锁已经被其它进程或线程持有,那么它就会等待,直到写锁被释放位置,一旦进程或线程获得了写锁,就可以进行写操作了。而当一个进程或线程需要进行读操作时,它会请求读锁,如果写锁已经被持有,那么它就会等待,直到写锁被释放为止。如果读锁没有被持有,那么它就可以获得读锁,进行读操作。在读写锁中,写锁具有排斥作用,而读锁具有共享作用。

  1. 死锁
  1. 死锁是一种并发编程中很常见的问题,它发生在多个进程或线程互相等待对方所持有的资源时,导致所有进程或线程都无法继续执行的一种情况。
  2. 死锁发生又是个必要条件,分别是:互斥条件、请求和保持条件、不剥夺条件、环路等待条件。

①互斥条件:每个资源一次只能被一个进程或线程持有。如果多个进程或线程同时请求某个互斥资源,那么只有一个进程或线程能够获得该资源。

②请求和保持条件:某个进程或线程持有一个资源后,继续请求其它资源,而这些资源可能被其它进程或线程持有。如果某个进程或线程持有一个资源,但请求另一个资源时被拒绝,它会保持对原有资源的占有,不释放它。

③不剥夺条件:已经分配的资源不能被强制性剥夺。如果某个进程或线程已经持有了某个资源,那么其它进程或线程不能强制剥夺它。

④环路等待条件:多个进程或线程形成一种等待循环,每个进程或线程都在等待其它进程或线程持有的资源。

  1. 为了避免所的发生,可以采用以下方法:

①避免使用多个共享资源

②破坏环路等待条件,例如引入资源优先级、引入超时机制等。

③预防死锁,例如按照一定的顺序分配资源、采用资源分配图方法。

④检测和恢复死锁,例如使用死锁检测算法、死锁恢复算法等。

*需要注意的是,虽然上述措施可以避免或解决死锁问题,但这些措施会增加系统的复杂度和开销。因此,在设计和实现系统时,应该充分考虑死锁问题,采用合适的方法和策略来避免和解决死锁问题。

猜你喜欢

转载自blog.csdn.net/LforikQ/article/details/130552816