1.什么是操作系统
操作系统是管理软件资源和硬件资源的程序,是计算机的基石。操作系统的内核是操作系统的核心部分,主要负责系统管理,例如文件管理,网络管理,存储管理等
2.操作系统的内核和中央处理器之间的区别
操作系统的内核属于操作系统层面,而CPU属于硬件。内核主要负责系统的管理,而CPU主要负责提供运算,处理各种指令。
Application:应用程序。kernel:内核。Memory:内存 。Device代表的是设备。
3.操作系统的主要功能
进程和线程管理、存储管理、文件管理、设备管理、网络管理、安全管理。
4.用户态和内核态
用户态运行的进程可以直接读取用户程序数据,拥有较低的权限,当需要执行某些特殊权限的操作时,例如读写磁盘,网络通信,就需要向操作系统发起调用请求,进入内核态。内核态可以访问计算机上的任何资源,包括系统的内存空间、设备、驱动程序等,不受限制,拥有更高的权限。需要注意的是,由于进入内核态需要付出较高的开销(一系列的身份验证和权限检查),应尽量减少进入内核态的次数,维持系统的安全和稳定性。
5.进程和线程
进程:打开的一个应用程序例如微信和QQ,就是一个进程。
线程:也叫轻量级的进程,多个线程可在同一个进程中执行,并且共享进程的资源,如内存空间、网络连接等。
线程和进程的区别:一个进程中可以包含多个线程,多个线程共享进程的堆和方法区,但是每个线程有自己独立的虚拟机栈、本地方法栈、程序计数器。也就是说线程是进程划分的最小单位,且进程是相互独立的,但线程不一定独立,同一进程中的线程可能会相互影响。
有了进程但是还需要线程的原因。进程的切换开销较大,线程切换的成本比较低,其次线程更轻量,同一个进程可以创建多个线程。多个线程的存在也有效的利用了计算机的资源,防止阻塞问题导致计算机资源的浪费。
为什么使用多线程的原因在于。1)在多核CPU时代,意味着多个线程可同时运行,使用多线程可减少线程上下文之间的切换开销,同时可提高进程对CPU利用的能力。2)现如今的系统都需要百万级和千万级的并发量,利用好多线程可大大提高系统的整体的并发能力和系统性能。
6.线程间同步的方式
线程间的同步是指两个或多个共享资源线程的并发执行,必须同步线程避免关键资源的使用冲突。
线程同步的方式如下:
1)互斥锁,采用互斥对象机制,只有拥有互斥对象的线程才可以访问公共资源。2)读写锁。允许多个线同时共享资源,但只有以一个线程可对共享资源进行操作。3)信号量,允许同一时刻多个线程访问同一资源,但需要控制在这一时刻访问同一资源的最大线程数量。
7.什么是PCB
Process Control Block,进程控制块。是操作系统中用来管理和跟踪进程的数据结构,可视为进程的大脑。当操作系统创建一个新进程时,会为该进程分配一个唯一的进程 ID,并且为该进程创建一个对应的进程控制块。当进程执行时,PCB 中的信息会不断变化,操作系统会根据这些信息来管理和调度进程。PCB中的信息包含进程的描述信息、进程的调度信息、进程对资源的需求情况等。
8.进程有哪几种状态以及进程之间的通信方式
包含 创建-就绪-运行-阻塞-结束这五种状态。通信方式包括管道/匿名管道,有名管道,信号,消息对列等。
9.进程的调度算法
先到先服务调度算法:从队列中选择最先进入队列的进程,为其分配资源使其立即执行,一直到该进程执行完毕或者遇到意外情况时在重新调度。
短作业先优先的调度算法:从队列中选择估计运行时间最短的进程为其分配资源使其执行,一直到该进程执行完毕或者遇到意外情况时在重新调度。
时间片轮调度算法:每个进程被分配一个时间段,此时间段内允许该进程执行。
优先级调度算法:为每个流程分配优先级,首先执行具有最高优先级的进程,如果优先级相同的话就以先来先服务的方式执行。
10.僵尸进程和孤儿进程
僵尸进程指的是子进程已终止,但是父进程仍运行,且父进程未调用wait()和waitpid()等系统调用来获取子进程的状态信息,释放子进程的资源,导致子进程的PCB仍然存在于系统中,但无法被进一步使用,这种情况下子进程被称为僵尸进程。
孤儿进程指的是一个进程的父进程已经终止或不存在,但是该进程仍在运行,此种情况下该进程为孤儿进程。孤儿进程通常是由于父进程意外终止或是未及时调用wait()和waitpid()来回收子进程导致的。
11.死锁
- 概念:两个或两个以上的资源的运行过程中,由于竞争资源造成的一种阻塞现象,若无外力的作用,它们将永远阻塞下去,不能向前推进。具体实例如下:
A占用了X资源,需要Y资源,而B已经占用了Y,此时B需要X资源,这种现象导致两个进程都在等待着对方释放资源,从而陷入死锁状态。
产生死锁的必要条件:互斥(资源处于非共享模式,只能被一个进程使用,如果另一个进程申请该资源,则必须等待该资源的释放)、循环等待(有n个进程p0,p1,p2,p3,p4,p0等待的资源被p1占有,p1等待的资源被p2占用,p2等待的资源被p3占用……,p4等待的资源被p0占用,从而造成循环等待)、占有并等待(一个进程应该至少占有一个资源,并等待另一个资源,而该资源被其他进程所占有)、非抢占(资源不能被抢占,只能在持有资源的进程完成任务后,该资源才能被释放)
- 解决死锁的方法:预防、避免、检测、解除
死锁的预防可以采用静态分配策略和层次分配策略。静态分配策略破环的是死锁必要条件之一的(占有并等待),即一个进程在执行前就申请到他所需要的全部资源,并且知道它要的资源都都会得到满足后才会开始执行,也就是说,进程要么不占用资源,要么占用了资源后一定会执行。层次分配策略破坏的是死锁必要条件之一的(循环等待),层次分配策略会将资源分成多个层次,一个进程得到某一次的资源后,它只能在申请较高一层的资源,当进程要释放某一次的资源时,必须先释放所占用的较高层的资源,按照此策略不会发生循环等待的发生。
死锁的避免采用的是银行家算法让系统处于安全状态。
死锁的检测是对资源的分配不加以限制,不采取死锁避免措施,系统定时的运行一个死锁的检测程序,用来判断系统是否出现死锁,如果检测到了死锁,在采取措施解除死锁状态。对于死锁的检测是利用进程-资源分配图来判断。
死锁的解除步骤有,1)立即结束所有进程的执行,重新启动操作系统。2)撤销涉及死锁的所有进程,解除死锁后继续运行。3)逐个撤销涉及死锁的进程,回收其资源直至死锁解除。