操作系统的学习

24

面试重点:

  1. 进程的概念
  2. 状态转移图
  3. 进程通信

程序,进程和线程概念

程序:为了完成特定任务实现的实体 指令+数据 组成 ,一般以文件的形式存在
进程:【面试重点】

  1. 进程是对程序的一次执行过程的抽象的结果 ,每个程序,支持同时有多个进程存在
    参考 菜谱 和 做菜的过程
  2. 进程是资源(硬件资源)分配的基本单位
    线程:【面试重点】 :进程和线程的区别
  3. 每个进程都由一个或多个线程组成
  4. 线程是调度的基本单位(线程是CPU 分配的基本单位)

关于核心硬件的协调管理

CPU:以时间为单位进行分配 -------- 进程调度 (进程管理)
内存:以空间为单位进行分配 -------- 内存管理

进程管理(进程调度)

  1. 进程:计算机硬件的视角 ----- 一组有关联的数据(一个对象)
class PCB ProcessControlBlock {
	// 1.唯一标识   pid
	// 2.和程序相关联的一些信息(程序文件路径是哪个)
	// 3.运行阶段的一些数据(哪个用户、在哪个路径启动..)
	// 4.分配的资源的统计信息
	// 5.Guanyu调度相关的
}
  1. 进程调度
    1. 进程的状态
      1. 进程一切准备就绪,只差分配给它CPU了 ------ 就绪
      2. 进程已经被分配到CPU了(已经开始运行了) ------ 运行
      3. 进程还由于一些原因,暂时未就绪,暂不能分配CPU
        1.刚刚创建,还未准备就绪 – 初始
        2.所有指令已经执行结束,PCB对象暂时未被OS回收 – 结束
        3.运行过程中出现- -些问题(等待10) – 阻塞

状态转移图【面试重点】

在这里插入图片描述

运行态 只能通过 就绪态 到达! !
并不是一旦就绪,就一定有CPU分配
 只有处于就绪态,才可能被分配CPU

哪些情况可能导致从运行态变化到其他状态?
 1. 执行结束
 2. 时间片耗尽
 3. 被高优先级的进程抢占了【抢占VS非抢占】
 4. 等待外部事件(IO)

现场保护、现场恢复

  1. 现场:CPU中寄存器中的重要数据(其中最核心的就是PC)
  2. 保护:把对应的数据保存到内存中(PCB 对象中 有对应的位置去保存)
  3. 恢复:把内存中之前保护的数据恢复到CPU寄存器中
    在这里插入图片描述

根据哪些算法选择一个进程来分配 CPU 【了解】
把我们自己想象成CPU
把我们要做的事情想象成进程

  1. 先来先服务
  2. 短任务优先
  3. 优先级

有兴趣 可以了解下:各自的优缺点、如何去实现(具体算法)

在OS语境下的并发(concurrent) VS并行(parallel) 【不常问】

在这里插入图片描述

用户态(user space) VS内核态(kernel space)

在这里插入图片描述
OS执行的时内核态的指令
进程执行的是用户态的指令

内核态和用户态的区别:
 开放的权限是有区别的:
  内核态的权限是比较大的
  用户态的权限是有限的
实例1:
 去ATM中取钱:
(用户态)
 1.插卡
 2.输入密码

(内核态)
3.验证密码正确
4.验证是否有余额+权限取现
5.去钱柜吐出钱

(用户态)
 6.吐钱
 7.吐卡
 8取走卡和钱

实例2:
String line = scanner.nextLine();
1.用户态
2.内核态(因为用户态往往没有权限去操作硬件的)
3.用户态

进程管理小结:

  1. 管理进程对CPU的访问
  2. 进程是什么
    1. 进程vs程序
    2. 进程是资源分配的基本单位(在进程管理,这里体现的不明显)
      目前分配CPU都是以线程为单位,而不再是以进程为单位了
    3. 进程是一个PCB对象,保存在内存(被OS直接管理的)中
  3. 进程的状态 状态转移图【重点】
  4. 进程的调度(选择算法 + 现场保护和恢复)
  5. 并发vs并行【重要】
  6. 内核态vs用户态

内存管理

在这里插入图片描述
如果使用物理地址的,有以下问题:

  1. 程序 需要关心具体分配到的物理地址,而物理地址很可能每次是不同的,导致处理的复杂性上升。
  2. 由于物理地址暴露了,导致, OS失去调整的自主权。

一般提到进程的内存地址管理,都是指的是线性地址
在这里插入图片描述

进程间通信(IPC Inter-Process-Communicate) 【重点】

背景1:由于进程是资源分配的基本单位,所以,分配给一个进程的内存空间,相对于其他进程来说,是隔离
在这里插入图片描述
背景2:随着程序要完成的工作愈发的复杂,很多时候,会通过多个进程,一起配合,来完成一项任务。
  比如: IDEA 中,点击运行时,会和javac程序(会启动为进程)来进行配合。再和java (jvm 进程)来进行配合。3个进程在配合

背景2提出了,要求不同进程之间有进行数据交换的需求
但背景 1 又在机制上阻止了这种数据的直接共享。所以,进程间通信的必要性就出现了!!!
ps:由于Java程序很少用多进程模型(多个进程一起配合),而更多的使用多线程模式(多个线程一起配合) 。所以我们了解为主!

进程间通信的常见形式:管道、共享内存、网络

  1. 无名管道(pipe)
  2. 有名管道
  3. 共享内存
    在这里插入图片描述
    共享内存如图
  4. 网络通信(广义的一种进程间通信:可以实现不同计算机之间的进程间通信)
      mysqlworkbench进程和mysqld (mysq|服务器)进程在进行进程间通信, via 网络
  5. 信号量
  6. 信号
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值