PHP学习笔记

操作系统学习笔记

2022-03-10  本文已影响0人  赵客缦胡缨v吴钩霜雪明

进程和线程

进程和线程的区别

线程具有许多传统进程所具有的特征,故又称为轻型进程(Light—Weight Process)或进程元;而把传统的进程称为重型进程(Heavy—Weight Process),它相当于只有一个线程的任务。在引入了线程的操作系统中,通常一个进程都有若干个线程,至少包含一个线程。

进程的状态转换

三种基本状态:

另外两种状态:

进程间的通信
区别:

互斥:是指三部在不同进程之间的若干程序片断,当某个进程运行其中一个程序片段时,其它进程就不能运行它们之中的任一程序片段,只能等到该进程运行完这个程序片段后才可以运行。

同步:是指散步在不同进程之间的若干程序片断,它们的运行必须严格按照规定的 某种先后次序来运行,这种先后次序依赖于要完成的特定的任务。

联系:

同步是一种更为复杂的互斥,而互斥是一种特殊的同步。也就是说互斥是两个线程之间不可以同时运行,他们会相互排斥,必须等待一个线程运行完毕,另一个才能运行,而同步也是不能同时运行,但他是必须要安照某种次序来运行相应的线程(也是一种互斥)。

在操作系统中,协作的进程可能共享一些彼此都能共同读写的一些有限资源。而这些资源是有限的,或者如一些共享内存,进程随意读写可能会造成数据的顺序,内容等发生错乱,进程不能对其随意的使用,读写等。从而会发生竞争。我们把对共享内存进行访问的程序片称为临界资源或临界区,对同一共享内存,任何时候两个进程不能同时处于临界区.

1.管道通信:

注意:匿名管道只能用于有亲缘关系间的进程,而有名管道允许无亲缘关系的进程间通信

2.消息队列MessageQueue:

消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

3.信号

信号是进程之间唯一的异步通信机制,信号的主要来源主要有硬件来源(入键盘操作ctrl + C) 和软件来源(如kill命令),信号传递的信息比较少,主要用于通知进程某个时间已经发生。比如利用kill pid,可以让系统优雅停机。

4.信号量

信号量是一个计数器,可以用来控制多个进程对资源的访问,通常作为一种锁机制,防止某个进程正在访问共享资源,其他进程也访问资源

5.共享内存

共享内存就是映射一段能被进程之间共享的内存,这段内存由一个进程创建,但是多个进程都可以共享访问,是最快的一种进程间通信的方式(不需要从用户态到内核态的切换),它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。

6.Socket

socket套接字,不仅仅可以用于本地进程通信,还可以用于不通主机进程之间的通信。

进程的调度和处理机调度

进程调度(低级调度),就是按照某种算法,从就绪队列中选择一个进程为其分配处理机

内存管理

内存管理的功能
内存分配方式
连续分配管理方式

连续分配方式,是指为一个用户程序分配一个连续的内存空间,比如说某用户需要1GB的内存空间,它就在内存空间中分配一块连续的 1GB的空间给用户。

分配策略算法
非连续分配管理方式

非连续分配允许一个程序分散地装入到不相邻的内存分区中

分页存储管理方式

image.gif

分段存储管理方式

image.gif

分页和分段存储管理的区别

页面置换算法(追求最少的缺页率)

最佳置换算法OPT(无法实现,作为一个标准):每次选择淘汰的页面将是以后永不使用,或者在最长的时间内不被使用,由于无法预知将会访问哪些页面,所以这种算法无法实现,只能作为一个标准

例如:需要访问7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1,则访问顺序:

image.gif

先进先出置换算法FIFO:每次选择淘汰的页面是最早进入内存的页面

例如:需要访问 3 2 1 0 3 2 4 3 2 1 0 4 ,则访问顺序

image.gif

最近最久未使用置换算法(LRU):每次淘汰的页面是最近最久未使用的页面

例如:需要访问 1 8 1 7 8 2 7 2 1 8 3 8 2 1 3 1 7 1 3 7 则访问顺序

最近未用置换算法NRU(Clock算法):为每个页面设置一个访问位,再将内存中的页面都通过链接指针链接成一个循环队列。当某页被访问时,其访问位置为1.当需要淘汰某个页面时,只需要检查页的访问位。如果是0,就将该页面换出,如果是1,则将他置为0,暂不换出。继续检查下一个页面,如果第一轮扫描之后全是1,则扫描完成,这些都置为0.再进行第二轮扫描,因此简单的Clock算法选择一个页面淘汰最多两轮

文件管理

文件的分配方式(物理结构)

文件块和磁盘块:类似于内存的分页

磁盘块:磁盘中的存储单元会被分为一个个"块/磁盘块/物理块",在很多的操作系统中,磁盘块的大小与内存块,页面的大小相同

文件块:在外存管理中,为了方便对文件数据的管理,文件的逻辑地址空间被分为一个一个的文件块,文件的逻辑地址可以表示为(逻辑块号,块内地址)的形式。用户通过逻辑地址来操作自己的文件,操作


文件的分配方式

连续分配:要求每个文件在磁盘上占有一组连续的块

链接分配:采取离散分配的方式,为文件分配离散的磁盘块。(类似链表数据结构)

image.gif
显示链接:把用于链接文件各物理块的指针显示的存放在一张表中,即文件分配表。
文件目录只需要记录起始块号。一个磁盘只需要设置一张分配表,开机时,将分配表读入内存,并常驻内存

优点:支持顺序访问,也支持随机访问,方便文件的扩展,不会产生碎片问题,地址转换不需要访问磁盘,因此文件的访问效率更高

缺点:文件分配表需要占据一定的存储空间
image.gif

索引分配:索引分配允许文件离散的分配在各个磁盘块中,系统会为每个文件建立一张索引表,索引表中记录了文件的各个逻辑块对应的物理块(索引表的功能类似于内存管理的页表–建立逻辑页面到物理页面之间的映射关系)。索引表存放的磁盘块称为索引块,文件数据存放的磁盘块称为数据块

文件存储空间管理

存储空间的划分和初始化

存储空间的划分:将物理磁盘划分为一个个文件卷(逻辑卷,逻辑盘,如Windows系统下的C,D,E盘等)

有的系统支持超大型文件,可由多个物理磁盘组成一个文件卷

存储空间的初始化:将各个文件卷划分为目录区,文件区

存储空间的管理方法

空闲表法:与内存管理中的动态分区分配很类似,为一个文件分配连续的存储空间。同样可以采用首次适应,最佳适应,最坏适应等算法来决定要为文件分配哪个区间

空闲链表法:分为—>

位示图法:每个二进制位代表一个盘块。例如可以用"0"来代表盘块空闲 ,"1"代表盘块已经分配

成组链接法:UNIX采用的策略,适合大型的文件系统。

IO管理

磁盘调度算法

一次磁盘读/写操作需要的时间:寻找时间+延迟时间+传输时间

磁盘调度算法:

死锁

对死锁的理解

如果一组进程中的每个进程都在等待一个事件,而这个事件是有这组中的某一个进程触发,这种情况则会导致死锁

资源死锁的条件:发生死锁时,以下四个条件必须全部具备

死锁的避免->银行家算法

当一个进程申请使用资源的时候,银行家算法通过先 试探 分配给该进程资源,然后通过安全性算法判断分配后的系统是否处于安全状态,若不安全则试探分配作废,让该进程继续等待。

安全序列的判断:

死锁的解除

简单来说,死锁的破坏就是对死锁产生的四个条件进行破坏,让其中任意一个不满足即可。

上一篇 下一篇

猜你喜欢

热点阅读