进程调度算法
进程的调度方式
通常有以下两种进程调度方式:
非剥夺(非抢占)调度方式:当一个进程正在处理机上执行时,即使有某个更为重要或者紧迫的进程进入就绪队列,仍然让正在执行的进程继续执行,直到该进程完成或发生某种事件而进入阻塞态时,才把处理机分配给更为重要或紧迫(优先级更高)的进程。其优点是实现简单,系统开销小,适用于大多数批处理系统,但它不能用于分时系统和大多数实时系统。
剥夺(抢占)调度方式:当一个进程正在处理机上执行时,若有某个更为重要或紧迫的进程(优先级更高)的进程需要使用处理机,则立即暂停正在执行的进程,将处理机分配给这个更重要的进程。这种方式对提高系统吞吐率和响应效率都有明显的好处。但抢占也要遵循一定原则。
调度的基本准则
主要有以下几种:
CPU利用率:CPU是计算机系统中最重要和最昂贵的资源之一,所以应该尽可能使得CPU保持忙的状态,资源利用率尽可能高。
系统吞吐量:单位时间内CPU完成的作业数量。长作业需要消耗较长的处理机时间,会降低系统的吞吐量。对于短作业,他们所需消耗的处理机时间较短,因此能提高系统吞吐量。调度算法和方式不同,也会对系统的吞吐量产生较大影响。
周转时 ...
进程内存分布
内存分布
以32位系统为例,共有4G的寻址能力,进程在内存中的分布如下图所示。Linux默认将高地址的1G空间分配给内核,称为内核空间,剩下的3G空间分配给进程使用,称为用户空间。
操作系统内核区
用户不可见
用户栈
栈指针,向下扩展
动态堆
向上扩展
全局区(静态区)
.data初始化 .bss未初始化
文字常量区(只读数据)
常量字符串
程序代码区
栈指针,向下扩展
栈区
由编译器自动分配释放,速度较快
用来存储函数调用时的临时信息的结构,存放为运行时函数分配的局部变量、函数参数、返回数据、返回地址等。这些局部变量等空间都会被释放
程序运行过程中函数调用时参数的传递也在栈上进行,如递归调用栈
当栈过多的时候,就是导致栈溢出(比如大量的递归调用或者大量的内存分配)
栈是向低地址扩展的数据结构,是一块连续的内存的区域,空间有限
堆区
由程序员分配 (new,malloc) 释放 (delete,free) ,并指明大小,速度较慢
若程序员不释放,导致内存泄漏,new 完没有 delete
不过在整个程序结束时由操作系统回收,但是这样无疑增加 ...
页面置换算法
页面置换算法简介
进程运行时,若其访问的页面不在内存而需将其调入(缺页异常),但内存已无空闲空间时,就需要从内存中调出一页程序或数据,送入磁盘的对换区,其中选择调出页面的算法就称为页面置换算法。
好的页面置换算法应有较低的页面更换频率,也就是说,应将以后不会再访问或者以后较长时间内不会再访问的页面先调出。
页面置换算法的目标是最小化缺页中断的次数,常见的页面置换算法有最佳⻚⾯置换算法(OPT)、先进先出置换算法(FIFO)、最近最久未使⽤的置换算法(LRU)、时钟页面置换算法和最不常⽤置换算法等。
最佳页面置换算法(淘汰未来不会使用/最长时间不访问的页面)
理论上的最佳算法,因为它可以保证最低的缺页率。但在实际应用中,由于无法预知未来的访问模式,OPT 通常无法实现。
先进先出置换算法(优先淘汰最早进入内存的页面)
FIFO 算法维护一个队列,新来的页面加入队尾,当发生页面置换时,队头的页面(即最早进入内存的页面)被移出。
FIFO 和 OPT 算法的区别在于:除了在时间上向后或向前看之外,FIFO 算法使用的是页面调入内存的时间,OPT 算法使用的是页面将来使用的时间
...
碎玉零珠————计算机操作系统
并发与并行
并发:在一段时间内,多个任务都会被处理。但在某一时刻,只有一个任务在执行。单核处理器做到的并发,其实是利用时间片的轮转,例如有两个进程 A 和 B,A 运行一个时间片之后,切换到 B,B 运行一个时间片之后又切换到 A。因为切换速度足够快,所以宏观上表现为在一段时间内能同时运行多个程序。
并行:在同一时刻,有多个任务在执行。这个需要多核处理器才能完成,在微观上就能同时执行多条指令,不同的程序被放到不同的处理器上运行,这个是物理上的多个进程同时进行。
进程的状态
运⾏状态(Runing):该时刻进程占用 CPU;
就绪状态(Ready):可运行,由于其他进程处于运行状态而暂时停止运行;
阻塞状态(Blocked):该进程正在等待某⼀事件发生(如等待输⼊/输出操作的完成)而暂时停止运行,这时,即使给它 CPU 控制权,它也无法运行;
创建状态(new):进程正在被创建时的状态;
结束状态(Exit):进程正在从系统中消失时的状态;
进程与线程
进程是一个正在执行的程序的实例。每个进程有自己独立的地址空间、全局变量、堆栈、和文件描述符等资源。
线程是进程中的一个执行单元。 ...
三次握手,四次挥手
三次握手
第一次握手:SYN(最开始都是 CLOSE,之后服务器进入 LISTEN)
发起连接:客户端发送一个 TCP 报文段到服务器。这个报文段的头部中,SYN 位被设置为 1,表明这是一个连接请求。同时,客户端会随机选择一个序列号(Sequence Number),假设为 x,发送给服务器。
目的:客户端通知服务器它希望建立连接,并告知服务器自己的初始序列号。
状态:客户端进入 SYN_SENT 状态。
第二次握手:SYN + ACK
确认并应答:服务器收到客户端的连接请求后,如果同意建立连接,它会发送一个应答 TCP 报文段给客户端。在这个报文段中,SYN 位和 ACK 位都被设置为 1。服务器也会选择自己的一个随机序列号,假设为 y,并将客户端的序列号加 1(即 x+1)作为确认号(Acknowledgment Number),发送给客户端。
目的:服务器告诉客户端,它的连接请求被接受了,并通知客户端自己的初始序列号。
状态:服务器进入 SYN_RCVD 状态。
第三次握手:ACK
最终确认:客户端收到服务器的应答后,还需要向服务器发送一个确认。这个 TCP 报文段的 ...
TCP 长连接和短连接
TCP 长连接和短连接什么是长连接和短连接
长连接(long connnection),指在一个连接上可以连续发送多个数据包,在连接保持期间,如果没有数据包发送,需要双方发链路检测包。
短连接(short connnection),是相对于长连接而言的概念,指的是在数据传送过程中,只在需要发送数据时才去建立一个连接,数据发送完成后则断开此连接,即每次连接只完成一项业务的发送。
TCP 长短连接的优势TCP 短连接
模拟一下TCP短连接的情况:client 向 server 发起连接请求,server 接到请求,然后双方建立连接。client 向 server 发送消息,server 回应 client ,然后一次读写就完成了,这时候双方任何一个都可以发起 close 操作,不过一般都是 client 先发起 close 操作。
从上面的描述看,短连接一般只会在 client/server 间传递一次读写操作。
短连接优点:管理起来方便,存在的连接都是有效的连接,不需要额外的控制手段。
TCP 长连接
模拟一下TCP长连接的情况,client 向 server 发起连接,serve ...