操作系统(1)--进程管理

一、什么是操作系统

  • 操作系统是管理计算机软件与硬件资源的程序,是计算机的基石,操作系统本质上是运行在计算机上的软件程序,用于管理软件和硬件资源
  • 操作系统屏蔽了硬件的复杂性,使得用户只需要关注软件层面,是用户与计算机硬件之间的接口
  • 操作系统的内核是操作系统的核心部分,负责系统的内存管理、硬件管理、文件管理和应用程序管理

二、系统调用

在聊系统调用之前,必须要先说一说用户态和核心态,用户态和核心态之前的区别其实就是特权级别不一样

  • 用户态:用户态运行的进程可以直接读取用户进程的数据,只能读取部分资源
  • 核心态:核心态运行的系统进程几乎可以访问所有资源而不受限制

需要有用户态和核心态的原因是需要限制不同程序之间的访问能力,如果所有程序都能访问底层的操作系统资源,那不是会乱套,所以划分出等级目的还是为了保护操作系统。但是在一些特殊情况下运行在用户态上的程序确实要访问核心态,那怎么办?

这个时候就需要用到系统调用了,也就是说运行在用户态的程序,凡是与系统态级别有关的资源都必须通过系统调用的方式向操作系统提出申请,并由操作系统代为完成

三、进程? 线程?

回答进程与线程的题目可以通过JVM的角度来进行回答,例如:在JVM内存划分中,元空间、堆是线程共享的,而虚拟机栈、本地方法栈、程序计数器是线程私有的,而运行整个java程序的是一个进程,由此看来一个进程可以多个线程,也可以结合具体的例子,可以说java程序的GC后台线程等等

四、进程有哪几种状态

进程的生命周期状态和线程的很像,大致可以分为5种状态:

  • 创建态:指进程正在处于创建的状态
  • 就绪态:指进程已经创建完成了,如果获得处理机调度则进程将从就绪态转为运行态
  • 运行态:指进程获得了CPU处理机的调度,正在处于运行状态
  • 堵塞态:指进程需要等待某种资源而处于的暂停状态,可能是打印机资源,IO资源等等
  • 结束态:指进程运行结束,从系统中消失

五、进程之间的通信方式?

进程之间通信大概有7种方式:

  • 管道/匿名管道:用于具有亲缘关系的父子进程或者兄弟进程之间的通信
  • 有名管道:匿名管道没有名字,则只能用于父子进程或兄弟进程,为了克服这个缺点引入了有名管道,有名管道遵循先进先出,可以实现任意两个管道之间的通信,有名管道以磁盘文件的方式存放
  • 信号:信号是一种比较复杂的机制,可以用来通知进程某个事件已经发生
  • 消息队列:消息队列是消息的链表,具有特定的格式,存放在内存中。与有名管道不同的是消息队列放在内存中,只有在内核重启的时候消息队列才会删除
  • 信号量:信号量是一个计数器,解决多进程对共享数据的访问,主要用途在于进程之间的同步问题
  • 共享内存:使得多进程可以访问同一块共享内存,不同进程可以看到其他进程对共享内存中数据的更新,不过这种方式需要某种机制保证比如互斥锁和信号量
  • 套接字:主要是用于网络中客户端和服务端之间通过网络进行通信

六、进程之间同步的方式

  • 互斥量:相当于java中的Synchronized,只有拥有互斥资源的对象才能访问公共资源的权限
  • 信号量:允许多个进程访问同一资源,但是需要控制同一时刻访问此资源的最大进程数量
  • 事件:通过通知操作的方式来保证多线程同步,还可以方便的实现多线程之间的优先级比较

七、进程的调度算法

  • 先来先服务:从就绪队列中选取一个最先进入该队列的进程进行分配资源,先来先服务算法调度有利于长作业,不利于短作业,如果短作业排在大量的长作业后面,就会导致性能下降
  • 短作业优先:从就绪队列中选取一个估计运行时间最短的进程进程分配资源,该算法对长作业不利,也没有考虑作业的紧迫性
  • 时间片轮转调度算法:给每一个进程分配一个时间片,当时间片用完时,发出一个中断请求
  • 多级反馈队列算法:前面先来先服务对短作业不利,而短作业优先对长作业不利,而多级反馈队列算法则综合了以上的优点,多级反馈队列优先算法需要设置多个就绪队列,并为每个就绪队列设置一个优先级,优先级高的队列的时间片少,当一个新进场进入内存时首先放入第一队列的末尾,只有当第一队列空闲时调度程序才将调度第二队列中的进程运行
  • 优先级调度:为每个进程分配一个优先级,优先级的算法为(等待时间 + 要求服务时间) / 要求服务时间,按照优先级的方式进行调度资源分配

猜你喜欢

转载自blog.csdn.net/weixin_44706647/article/details/115278301