操作系统面试题
一、进程
1.进程和线程的区别
2.进程间通信方式
管道
netstat -tulnp | grep 8080
linux命令中的”|“是管道的意思
1)这种通信方式是单向的,只能把第一个命令的输出作为第二个命令的输入,如果进程之间想要互相通信的话,那么需要创建两个管道。
2)管道的通知机制类似于缓存,就像一个进程把数据放在某个缓存区域,然后等着另外一个进程去拿,并且是管道是单向传输的。
3)缺点:这种通信方式效率低下,a 进程给 b 进程传输数据,只能等待 b 进程取了数据之后 a 进程才能返回。
4)所以管道不适合频繁通信的进程。
5)优点:比较简单,能够保证我们的数据已经真的被其他进程拿走了。
消息队列
1)a 进程要给 b 进程发送消息,只需要把消息放在对应的消息队列里就行了,b 进程需要的时候再去对应的
消息队列里取出来。同理,b 进程要个 a 进程发送消息也是一样。这种通信方式也类似于缓存吧。
2)缺点:如果 a 进程发送的数据占的内存比较大,并且两个进程之间的通信特别频繁的话,消息队列模型就不大适合了。因为 a 发送的数据很大的话,意味发送消息(拷贝)这个过程需要花很多时间来读内存。
共享内存
1)共享内存这个通信方式就可以很好着解决拷贝所消耗的时间了。
2)缺点:多进程竞争内存的问题,就像类似于我们平时说的线程安全问题。
信号量
1)信号量的本质就是一个计数器,用来实现进程之间的互斥与同步。
2)例如信号量的初始值是 1,然后 a 进程来访问内存1的时候,我们就把信号量的值设为 0,然后进程b 也要来访问内存1的时候,看到信号量的值为 0 就知道已经有进程在访问内存1了,这个时候进程 b 就会访问不了内存1。
Socket
1)共享内存、管道、信号量、消息队列,他们都是多个进程在一台主机之间的通信。
2)Socket可以使不同主机上的进程进行通信。
3)我们平时通过浏览器发起一个 http 请求,然后服务器给你返回对应的数据,这种就是采用 Socket 的通信方式了。
3.进程的状态
4.PCB
PCB 是进程存在的唯一标识
PCB中包括
5.进程调度算法
批处理系统
交互式系统
二、死锁
1.如何预防死锁
2.线程安全的活跃性问题
两个或多个线程同时对一共享数据进行修改,从而影响程序运行的正确性时,这种就被称为竞态条件(race condition)
3.死锁检测
三、用户态和内核态
1.出现背景-CPU指令集
1)C P U 指令集可以直接操作硬件的,要是因为指令操作的不规范`,造成的错误会影响整个计算机系统的。
2)因为对于硬件的操作出现问题的可能性大,所以操作系统内核直接屏蔽开发人员对硬件操作的可能,都不让你碰到这些 C P U 指令集。
3)硬件设备商对 C P U 指令集设置了权限,不同级别权限能使用的 C P U 指令集是有限的。
4)其中 ring 0 权限最高,可以使用所有 C P U 指令集,ring 3 权限最低,仅能使用常规 C P U 指令集,不能使用操作硬件资源的 C P U 指令集,比如 I O 读写、网卡访问、申请内存都不行,Linux系统仅采用ring 0 和 ring 3 这2个权限。