操作系统随记

发布于:2022-12-12 ⋅ 阅读:(687) ⋅ 点赞:(0)

概念性组成

        线程描述表记录的信息有线程ID、指令地址寄存器、处理器寄存器、硬件设备寄存器以及栈现场状态等少量线程私有信息。

        进程控制块(PCB)的内容一般可以分成调度信息现场信息两大部分。现场信息包括程序状态字、时钟、界地址寄存器等;调度信息包括进程名、进程号、存储信息、优先级、当前状态、资源清单、“家族关系”、消息队列指针等。

        不同的进程由于设计目标不同而具有不同的进程行为,其可分为计算密集型I/O密集型

        用于进程控制的原语一般有创建进程、撤销进程、挂起进程、激活进程、阻塞进程、唤醒进程以及改变进程优先级等。

        P、V操作是一类低级通信原语,不能承担进程间大量信息的交换任务(进程共享是一种进程间大量信息的交换)且其主要不足为程序不易读懂、程序不利于修改和维护、正确性难以保证。解决进程之间的大量信息通信的问题有三类方案,分别为共享内存、消息机制以及通过共享文件进行通信(管道通信)。上述三类高级通信原语,它们不仅要保证相互制约的进程之间的正确关系,还要同时实现进程之间的信息交换。[4]

        程序是指令、数据及其组织形式的描述,进程是程序的实体。进程是由进程控制块、程序段、数据段组成。每一个进程都有它自己的地址空间,一般情况下,包括文本区域、数据区域和堆栈。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。

        实时系统的调度算法可以是静态的或是动态的,主要包括速率单调调度算法(静态)最早最终时限优先调度(动态)速率单调算法(RMS),任务的优先级与它的周期表现为单调函数的关系,任务的周期越短,优先级越高;任务的周期越长,优先级越低。最早最终时限优先调度算法(EDF),根据截止期限动态分配优先级。截止期限越早,优先级越高;截止期限越晚,优先级越低。[8]

        作业调度,根据作业控制块中的信息,审查系统能否满足用户作业的资源需求,以及按照一定的算法,从外存的后备队列中选取某些作业调入内存,并为它们创建进程、分配必要的资源。然后再将新创建的进程插入就绪队列,准备执行。因此,有时也把作业调度称为接纳调度。[9]

        七状态进程模型:(增加挂起状态的好处是提高处理机效率、可以为运行进程提供足够的内存以及有利于调试)

         最高响应比优先算法(作业调度):最高响应比优先算法是介于先来先服务算法(FCFS)和最短作业优先算法(SJF)之间的一种算法,它既考虑了作业的等待时间,又考虑了作业的处理时间。调度规则:响应比最高的作业先运行。响应比 = (进程等待时间+进程运行时间)/ 进程运行时间响应周期 = 进程等待时间 + 进程运行时间。[10]

        一个管程定义了一个数据结构和能为并发进程所执行(在该数据结构上)的一组操作,这组操作能同步进程改变管程中的数据。局部于管程的数据结构,只能被局部于管程的过程所访问,任何管程之外的过程都不能访问它;反之,局部于管程的过程也只能访问管程内的数据结构。由此可见,所有进程要访问临界资源时,都必须经过管程才能进入,而管程每次只允许一个进程进入管程,从而实现进程的互斥

        测试与设置指令(Test & Set)是解决互斥访问临界区的硬件方法。TS指令实现互斥的算法是,测试锁变量的值,如为1,则重复执行本命令,不断重复测试变量的值;如为0,则立即将锁变量测试值置为1,进入临界区;退出临界区时,将锁变量测试值置为0。(测试并设置指令是一条完整的指令,而在一条指令的执行中间是不会被中断的,保证了锁的测试和关闭的连续性

        信号量初始化后,只能实施P、V原语操作,分别表示对信号量的原子减一和加一的操作,可用资源数或者等待该资源的进程数,不能随意地不经P、V操作而使其改变。

        共享内存机制(共享缓冲区方式)(进程间通信方式):共享内存指在多处理器的计算机系统中,可以被不同中央处理器CPU访问的大容量内存。由于多个CPU需要快速访问存储器,这样就要对存储器进行缓存(Cache)。任何一个缓存的数据被更新后,由于其他处理器也可能要存取,共享内存就需要立即更新,否则不同的处理器可能用到不同的数据。共享内存是Unix下的多进程之间的通信方法,这种方法通常用于一个程序的多进程间通信,实际上多个程序间也可以通过共享内存来传递信息,特点是可以高效地共享大量信息。

        消息机制(进程间通信方式):信息传递直接发送消息给一个进程,消息采用内存中若干公共缓冲区组织成队列,依赖进程或基础框架来调用实际执行的代码。

        管道通信(进程间通信方式):发送进程以字符流形式将大量数据送入管道,接收进程可从管道接收数据,二者利用管道进行通信。通过连接两个进程的一个打开的共享文件,可以实现进程间的数据通信。管道通信机制中的同步与互斥都由操作系统自动进行,对用户是透明的。

        套接字:一组进程间交换数据的协议。

        并发进程间存在的三大关系,分别为直接感知(相互直接交互,如通信)、间接感知(双方都与第三方交互,如共享资源)以及互相不感知(相互间完全不了解其他进程的存在)。

        与时间有关的相互制约问题是指在并发程序中共享了公共变量,使得程序的计算结果与并发程序执行的速度(时间)有关(源于并发进程的异步性)。

        进程间的相互制约关系

         信箱通信方式:信箱通信是一种”间接“通信方式。信箱通信是借助于收发双方进程之外的共享数据结构(如消息队列)作为通信中转,发送方和接收方不必直接建立联系,没有处理时间上的限制。发送方可以在任何时间发送消息,接收方也可以在任何时间收信。

        一个信箱的结构可以由”信箱说明“和”信箱体“两部分组成。在”信箱说明“中,一般包含可存信件数、已有信件数和可存信件的指针三个参数。

        硬件方法实现进程互斥的优点:使用范围广(适用于任意数目进程,在单处理器和多处理器环境中完全相同)、实现简单(标志设置简单,含义明确,容易验证其正确性)、支持多个临界区(在一个进程内有多个临界区,只需为每个临界区设立一个布尔变量)。

        硬件方法实现进程互斥的缺点:进程在等待进入临界区时,要耗费处理机的时间,不能实现”让权等待“、由于进入临界区的进程是从等待进程中随机选择的,有的进程可能出现”饥饿“现象。

简单的计算问题

(一)信号量机制—生产者与消费者问题

        实现互斥的P操作一定要放于实现同步的P操作之后,否则极有可能发生“死锁”现象。再者,非必要代码我们也应不放于PV操作之间,否则极可能导致进程之间的并发度降低。

 (2)信号量机制—读写者问题

        读者与写者两组并发进程,共享一个文件,当两个或两个以上的读进程同时访问共享数据时不会产生副作用,但若某个写进程和其他进程(读或写)同时访问共享数据时则可能导致数据不一致的错误。因此要求:

        ①允许多个读者可以同时对文件执行读操作;

        ②只允许一个写者往文件中写信息;

        ③任一写者在完成写操作之前不允许任何其他读者或写者工作;

        ④写者执行写操作前,应让已有的读者和写者全都退出。

参考资料:

[1]fork函数详解_Oorik的博客-CSDN博客_fork()函数

[2]pthread_join()详解及实验_EmbededCoder的博客-CSDN博客_pthread_join

[3]POSIX线程库pthread_酷酷的猪的博客-CSDN博客_posix pthread

[4]操作系统中的管程是什么概念呢?_qq_32001201的博客-CSDN博客_管程是什么意思

[5]Python 多线程 Thread包_森林海的棕熊的博客-CSDN博客_python多线程包

[6]多道程序系统_百度百科

[7]中断与陷入的区别_吃星星的博客-CSDN博客_中断和陷入的区别

[8]最早截止时间优先(EDF)_一只酷酷的小猪猪的博客-CSDN博客_最早截止时间优先算法

[9]百度百科(作业调度)

[10]最高响应比优先算法(HRRF)及例题详解_EMT00923的博客-CSDN博客_hrrf

[11]进程间通信——几种方式的比较和详细实例_worthsen的博客-CSDN博客_进程间的通信方式三种

[12]计算机四级操作系统-4-并发与同步 - 小西贝呦 - 博客园(计算机四级学习博主)


网站公告

今日签到

点亮在社区的每一天
去签到

热门文章