面试复习-操作系统

2020-06-17  本文已影响0人  Lugton

用户态:当一个进程在执行用户自己的代码时位用户态,可以直接读取用户程序的数据
内核态:控制计算机的硬件资源,并提供上层应用程序运行的环境
系统调用:为了使用户态运行的上层应用能够访问到内核态的资源,内核为上层应用程序开放的接口
CPU时钟:用于同步通信

一、进程管理

1.1 进程

进程是程序的一次执行,是资源分配的基本单位。进程控制块(PCB)描述进程的基本信息和运行状态。创建进程实际上是创建进程实体中的PCB,撤销进程,实质上是撤销进程的PCB。

1.2 进程同步
1.3 进程通信
1.4 进程的调度算法
1.5 线程

线程是独立调度的基本单位,一个进程中可以有很多个线程,它们共享进程资源。

1.6 fork()函数

fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间 。然后把父进程所有的值都复制到子进程中,只有少数值和原来进程的值不同。在fork函数执行完毕后,如果创建新进程成功,则出现两个进程,一个是子进程,一个是父进程。在子进程中,fork函数返回0,在父进程中,fork返回新创建子进程的进程ID。

1.7 Linux进程管理指令
ps -l #查看自己的进程
ps aux #查看系统所有进程
ps aux | grep xxxx #查看xxxx线程
top #查看全部进程
top -p xxx #查看某个进程信息
netstat -anp | grep 8080 # 查看8080端口的使用情况
1.8 Java程序cpu占用过高的排查思路

1.用top指令找出cpu占比异常高的进程
2.用ps aux | grep xxx定位某个进程
3.定位到具体的线程 ps -mp 进程编号
4.jstack -l查看输出

1.9 协程

协程是一种比线程更加轻量级的存在,一个线程可以拥有多个协程。协程完全由程序所控制,也就是在用户态执行。这样带来的好处是性能大幅度的提升,因为不会像线程切换那样消耗资源。协程仅仅是一个特殊的函数,和进程、线程不是一个维度的。多个协程在一个线程内是串行执行的。

二、死锁

多个进程在运行过程中因争夺资源而造成的一种僵局

2.1 处理死锁的基本方法

银行家算法的数据结构:
1.可利用资源向量Available
2.最大需求矩阵Max
3.分配矩阵Allocation
4.需求矩阵Need(尚需的各类资源数)
设Request是某进程i的请求向量,如果Request[j]=K,表明需要K个Rj类型的资源:

1)如果Request[j]<=Need[i,j],转向步骤2,否则出错,因为它需要的资源数已超过它宣布的最大值
2)如果Request[j]<=Available[j],转向步骤3,否则没有足够资源
3)系统尝试着把资源分配给Pi,并修改下面数据结构的数值:
Available[j]:=Available[j]-Request[j]
Allocation[i,j]=Allocation[i,j]+Request[j]
Need[i,j]=Max[i,j]-Allocation[i,j]
4)系统执行安全性算法,检查此次资源分配后系统是否处于安全状态。如果安全才给分配资源。

三、内存管理

操作系统的内存管理主要负责内存的分配与回收,以及地址转换,即将逻辑地址转换成相应的物理地址。

3.1 内存管理机制
3.2 分页与分段的比较
3.3 页面置换算法

如果要访问的页面不在内存中,就发送缺页中断,从而将该页调入内存中。此时如果内存已无空闲空间,系统必须从内存中调出一个页面到磁盘对换区来腾出空间。

3.4 虚拟内存

虚拟内存的目的是为了让物理内存扩充成更大的逻辑内存,从而让程序获得更多的可用内存。虚拟内存不用将地址空间中的每一页都映射到物理内存,也就是说一个程序不需要全部装入内存就可以运行,这样操作系统就可以运行比其物理内存更大的程序。

3.5 快表

操作系统在页表的基础之上引入了快表,来加速逻辑地址到物理地址的转换。可以把快表理解为一种特殊的高速缓冲存储器,其中的内容是页表的一部分或全部内容。快表的作用与页表相似,但是提高了访问速率。没有快表时,读写内存数据时CPU要访问两次主存,有了快表,有时只须访问一次高速缓冲存储器,一次主存。

四、设备

4.1 磁盘调度算法
上一篇 下一篇

猜你喜欢

热点阅读