操作系统基础知识1

1、用户态和内核态的区别?

a、访问权限。用户态下,应用程序只能访问受限的的资源和执行受限的程序;而在内核态下,操作系统具有完全的访问权限,可以访问系统的所有资源和执行所有操作;

b、CPU指令集。用户态下,用户只能执行非特权指令,而内核态下,CPU可以执行特权指令,例如访问设备、修改系统状态;

c、中断和异常处理。用户态下,发生中断或者异常时,操作系统会进行中断处理,京控制权转移到内核态下的中断处理程序。内核态下,操作系统可以直接处理中断和异常,并进行相应的处理操作;

d、内存保护。用户态下,应用程序只能访问自己的内存空间,无法访问其他应用程序的内存空间和操作系统的内存空间;内核态下,操作系统可以访问所有的内存空间,包括应用程序的内存空间;

e、安全性。用户态的应用程序受到限制,操作系统系统可以对其进行隔离和保护,防止恶意更改代码对系统造成伤害;内核态下的操作系统具有更高的权限,需要对其进行严格的安全管理,防止非法访问和恶意操作。

2、进程调度算法有哪些?

a、先来先服务:每次从就绪队列中选择最先进入队列的进程,然后一直执行,直到进程退出或者阻塞,才会去选择下一个进程,适用于CPU繁忙型作业的系统,不适用与I/O繁忙型作业的系统

b、最短作业优先调度:优先选择运行时间最短的进程来运行,提高系统吞吐量;

c、高响应比优先调度算法:每次进行进程调度时。先计算响应比。把响应比优先级最高的进程投入运行。

优先权=(等待时间+要求服务时间)/(要求服务时间)

d、时间片轮转调度算法:每个进程被分配一个时间片,在该时间段内执行对应的进程。时间片太短会导致过多的上下文切换,降低CPU效率;时间片太长可能会导致短作业进程的的响应时间边长

e、最高优先级调度算法:从就绪队列中选择最高优先级的进程进行运行。

静态优先级:创建进程时,已经确立好优先级,在整个运行时间内优先级都不会改变。

动态优先级:根据进程的动态变化调整优先级,比如随着进程运行时间增加,则降低其优先级,随着进程等待时间增加,则升高其优先级。随着时间推移增加等待进程的优先级。

非抢占式:当就绪队列中出现优先级高的进程,运行完当前进程,再选择优先级高的进程。

抢占式:当就绪队列中出现优先级更高的进程,当前进程挂起,调度优先级更高的进程运行。

缺点:低优先级的进程永远不会被执行。

f、多级反馈队列:是优先级和时间片算法的融合。

(1)、设置多级就绪队列,各级优先队列优先级从高到底,时间片从小到大;

(2)、新进程到达时先进入第1级队列末尾。按先来新服务的原则排队等待被调度。如果第1mei级队列规定的时间片没运行完成,则将其转入到第2级队列的末尾,以此类推,直到完成;

(3)、当优先级高的队列为空时,才调用优先级低的队列中的任务执行,如果Sn队列中的进程执行时,S1-n中进入新的进程,则停止当前正在执行的进程,并将其放到原队列的末尾,接着执行高优先级的进程。

3、进程间的通信?

管道、消息队列、共享内存、套接字、信号量。

4、线程间的通信?

互斥量、信号量、条件变量、读写锁。

5、IO多路复用?

select、poll、epoll

6、select、poll、epoll的区别?

select实现多路复用的方式是,将已连接的socket都放在一个文件描述符集合中,然后调用select函数将文件描述符集合拷贝到内核里,让内核来检查是否由网络事件的发生,遍历所有的文件描述符,检查到有事件产生后,将socket标记为可读或可写,然后把文件描述符拷贝到用户态,用户态还需要遍历找到可读或可写的socket,再进行处理。

遍历2次文件描述符,拷贝两次文件描述符。

select使用BitsMap,表示文件描述符集合,linux下,内核中的FD_SETSIZE默认最大值为1024,只能监听0-1023的文件描述符。

poll不再使用BitsMap来存储所关注的文件描述符,使用链表来组织关注的文件描述符,同时监听的socket可以变得更多。

epoll在内核中使用红黑树来跟踪进程所有待检测的文件描述符,把需要监控的socket通过epoll_ctl()函数加入到内核中的红黑树里。每次操作时只需要传入一个待检测的socket,减少了用户态和内核态的数据拷贝和内存分配。

epoll使用事件驱动机制,内核里维护了一个链表来记录就绪事件,当某个socket有事件发生时,通过回调函数内核会将其加入到就绪链表中,用户调用epoll_wait(),只会返回这个就绪链表,不需要扫描整个文件描述符,提高效率。

7、为什么要有虚拟内存?

1、进程隔离。如果没有虚拟内存的话,在内存中同时运行两个程序会发生冲突,造成系统崩溃。例如在0x1024位置时,进程a写入x=100,进程b写入x=1000,这时候就会出现问题。

2、地址空间扩展。缓解物理内存不足的压力,将硬盘空间作为内存扩展,增加计算机可用的内存量。

8、进程和线程的区别?

线程是CPU调度的最小单位,进程是操作系统资源分配的最小单位。

进程的调度是操作系统内核进行的,切换进程需要进行上下文切换,设计用户态和内核态之间的切换,开销相对较大。线程的调度是在用户程序中完成的,切换线程可以在用户态下快速切换,减少系统调用开销。

通信方式不同。

一个线程挂掉,进程中的全部线程都要挂掉。一个进程挂掉不影响其他进程。

进程拥有自己的内存空间,线程共享进程的内存空间。

9、进程、线程、协程对比?

协程只是一个特殊的函数。

一个进程可以包含多个线程,一个线程可以包含多个协程。

进程的切换者是操作系统,切换时机是根据操作系统自己定义的切换策略来决定的。用户是无感的,进程的切换内容包括页全局目录、内核栈和硬件上下文,切换内容被保存在内存中。进程的切换过程是用户态--内核态--用户态,切换效率低;

线程的切换者是操作系统,切换时机是根据操作系统自己定义的切换策略来决定的,用户是无感的,线程的切换内容包括内核栈和硬件上下文。线程切换内容被保存在内核栈中,线程切换过程是用户态--内核态--用户态;

协程的切换者是用户,切换时机是用户自己的程序决定的。协程的切换内容是硬件上下文,切换内容被保存在自己的变量中,协程的切换过程只有用户态,切换效率高。

相关推荐
sp_wxf9 分钟前
Stream流
linux·服务器·windows
LYK_HAHA27 分钟前
centos常用知识和命令
linux·运维·centos
可涵不会debug1 小时前
【Linux】信号知识三把斧——信号的产生、保存和处理
linux·运维·信号
jyan_敬言1 小时前
【Linux】Linux命令与操作详解(一)文件管理(文件命令)、用户与用户组管理(创建、删除用户/组)
linux·运维·服务器·c语言·开发语言·汇编·c++
unix2linux2 小时前
Parade Series - SHA256
linux·python·mysql·shell
学思之道2 小时前
给Linux操作系统命令取个别名
linux·运维·经验分享·学习方法
GOTXX3 小时前
应用层协议HTTP
linux·网络·网络协议·计算机网络·http·fiddler
dong_beijing3 小时前
GO语言工程构建示例-mac和linux适用
linux·运维·服务器
小小工匠3 小时前
系统安全 - Linux /Docker 安全模型及实践
linux·安全·系统安全
2201_761199044 小时前
nginx 负载均衡1
linux·运维·服务器·nginx·负载均衡