操作系统相关

一、进程与线程

1.概念

进程:进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的,系统运行一个程序即是一个进程从创建到运行再到消亡的过程。

线程:线程进程划分成的更小的运行单位。一个进程在执行过程中可以产生多个线程。一个进程下的多个线程共享进程的方法区资源,每个线程有独立的程序计数器虚拟机栈本地方法栈

2.进程与线程的区别

进程和线程最大不同在于基本上各个进程是相互独立的,而各个线程不一定,同一个进程中的线程可能会相互影响。

线程执行开销小,但是不利于资源的管理和保护。线程是程序执行的最小单位,进程是操作系统分配资源的最小单位。

2.进程的内存分配

栈区
由编译器自动分配和释放,存放函数的参数值,局部变量的值等。
堆区
是通过new分配的内存块。
全局区
全局变量和静态变量存储在这一区域。
文字常量区
常量字符串存放在这一区域。
程序代码区
存放函数体的二进制代码。

4.进程的通信方式

七种方式:
管道/匿名管道
只能用于具有亲缘关系的进程,存在于内存中。
有名管道
严格遵循先进先出,可以实现本机任意两个进程通信,名字存在于文件系统,内容存放于内存中。
信号
用于进程间相互通信或者操作的一种机制,信号可以在任意时刻发送给进程,无需知道进程当前状态。
消息队列
存放于内核中的消息链表,每个消息队列由消息队列标识符表示。消息队列存放于内核中,只有内核重启(操作系统重启)或者显示删除消息队列,该消息队列才会真正被删除。克服了信号承载信息少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。
共享内存
使多个进程可以直接读写同一块内存,进程可以及时查看其它进程对共享内存中的数据更新。这种方式需要依靠同步机制(例如信号量)来达到进程间的同步和互斥。
信号量
这是一个计数器,用于多进程对于共享数据的访问,信号量的意图在于进程间的同步。
套接字socket
主要用于在客户端和服务器之间通过网络进行通信。套接字是支持TCP/IP的网络通信的基本操作单元。是不同主机之间进行双端通信的端点。是通信双方的一种约定,用套接字中的相关函数来完成通信过程。
管道通信底层
传输的数据是无格式的流且大小受限。
管道分为匿名管道和有名管道
匿名管道是一个内核缓冲区,只能在父子进程中使用。父进程创建管道,得到两个文件描述符指向管道两端,父进程fork出的子进程,也有两个文件描述符指向同一管道,这样两个进程就可以使用这个管道通信。
有名管道可以实现任何两个进程之间的通信,有名管道的名字存在于文件系统,内容存放在内存中。

5.线程的同步方式

线程同步是两个或者多个共享关键资源的进程并发执行。应该同步线程以避免关键资源的使用冲突。
互斥量: 采用互斥对象机制,只有拥有互斥对象的线程才有访问共有资源的权限。因为互斥对象只有一个,因此可以保证公共资源不会被多个线程同时访问。比如java中的关键字synchronized。
信号量: 允许同一时刻多个线程访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量,此时可以使用信号量充当计数器的角色。
事件: 通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操作。

6.进程的调度算法

进程调度: 所谓进程调度,就是从进程的就绪队列(阻塞)中按照一定的算法选择一个进程并将 CPU 分配给它运行。

先到先服务(FCFS)调度算法 : 从就绪队列中选择一个最先进入该队列的进程为之分配资源,使它立即执行并一直执行到完成或发生某事件而被阻塞放弃占用 CPU 时再重新调度。

短作业优先(SJF)的调度算法 : 从就绪队列中选出一个估计运行时间最短的进程为之分配资源,使它立即执行并一直执行到完成或发生某事件而被阻塞放弃占用 CPU 时再重新调度。

高响应比优先:调度时计算所有就绪进程的响应比,为响应比最高的进程分配 CPU。响应比 = (进程的等待时间 + 进程需要的运行时间) / 进程需要的运行时间。

最短剩余时间优先:当一个新的进程到达时,把它所需要的整个运行时间与当前进程的剩余运行时间作比较。如果新的进程需要的时间更少,则挂起当前进程,运行新的进程,否则新的进程等待。

时间片轮转调度算法 : 时间片轮转调度是一种最古老,最简单,最公平且使用最广的算法,又称 RR(Round robin)调度。每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间。

优先级调度 : 为每个进程分配优先级,首先执行具有最高优先级的进程,依此类推。具有相同优先级的进程以 FCFS 方式执行。可以根据内存要求,时间要求或任何其他资源要求来确定优先级。

多级反馈队列调度算法 :设置多个就绪队列。在系统中设置多个就绪队列,并为每个队列赋予不同的优先。第一个队列的优先级最高,第二个次之,其余队列的优先级逐个降低。该算法为不同列中的进程所赋予的执行时间片的大小也各不相同,在优先级愈高的队列中,其时间片愈小。
每个队列都采用FCFS算法。当新进程进入内存后,首先将它放入第一队列的末尾,按FCFS原则等待调度。当轮到该进程执行时,如它能在该时间片内完成,便可撤离系统。否则,即它在一个时间片结束时尚未完成,调度程序将其转入第二队列的末尾等待调度;如果它在第二队列中运行个时间片后仍未完成, 再依次将它放入第三队列…依此类推。当进程最后被降到第n队列后,在第n队列中便采取按RR方式运行。

抢占与非抢占:
所谓非抢占式的意思就是,当进程正在运行时,它就会一直运行,直到该进程完成或发生某个事件发生而被阻塞时,才会把 CPU 让给其他进程。
非抢占算法有:先到先服务;最短作业优先;高响应比优先;
抢占就是指当进程正在运行的时,可以被打断,把 CPU 让给其他进程。
抢占式算法有:最短剩余时间优先;轮转调度算法;最高优先级调度算法;
优先级调度算法可以抢占也可以非抢占。

二、内存

1. 物理内存和虚拟内存

物理内存:真实的内存条。
虚拟内存:利用磁盘空间虚拟出的一块逻辑内存,用作虚拟内存的磁盘空间被称为交换空间(Swap Space)。(为了满足物理内存的不足而提出的策略)

2.页面置换算法

页面置换算法:当调入进程所请求的页面时,如果内存中已经没有空闲块了,则必须按照某种算法将内存中的若干页面淘汰至外存。用于选择淘汰页面的算法称为页面置换算法,置换算法的好坏,将直接影响到请求分页系统的性能。

OPT 页面置换算法(最佳页面置换算法) :最佳(Optimal, OPT)置换算法所选择的被淘汰页面将是以后永不使用的,或者是在最长时间内不再被访问的页面,这样可以保证获得最低的缺页率。但由于人们目前无法预知进程在内存下的若千页面中哪个是未来最长时间内不再被访问的,因而该算法无法实现。一般作为衡量其他置换算法的方法。

FIFO(First In First Out) 页面置换算法(先进先出页面置换算法) : 总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面进行淘汰。

LRU (Least Recently Used)页面置换算法(最近最久未使用页面置换算法) :LRU算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 T,当须淘汰一个页面时,选择现有页面中其 T 值最大的,即最近最久未使用的页面予以淘汰。

LFU (Least Frequently Used)页面置换算法(最少使用页面置换算法) : 该置换算法选择在之前时期使用最少的页面作为淘汰页。

CLOCK时钟置换算法:每个页面关联一个使用位,想象为一个环,初始所有使用位置0,页面首次装入内存,使用位置1,当需要置换时,找0,遇到1置0,如果一圈未找到,那此时所有使用位均会被置0。

改进的CLOCK时钟置换算法:每个页面关联一个使用位和修改位,想象为一个环,初始所有使用位置0,修改位置0。
第一轮: 从当前位置开始扫描到第一个(0,0) 的帧用于替换。本轮扫描不修改任何标志位。

第二轮: 若第一轮扫描失败,则重新扫描,查找第一个(0, 1)的帧用于替换。本轮将所有扫描过的帧访问位设为0。

第三轮: 若第二轮扫描失败,则重新扫描,查找第一个(0, 0)的帧用于替换。本轮扫描不修改任何标志位。

第四轮: 若第三轮扫描失败,则重新扫描,查找第一个(0, 1)的帧用于替换。

由于第二轮已将所有帧的访问位设为0,因此经过第三轮、第四轮扫描一定会有一个帧被选中,因此改进型CLOCK置换算法选择一个淘汰页面最多会进行四轮扫描。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值