-
传统存储管理方式(连续分配和非连续分配)的特征、缺点:
- 一次性
作业必须一次性全部装入内存后才能开始运行。这会造成两个问题:
① 作业很大时,不能全部装入内存,导致大作业无法运行
② 当大量作业要求运行时,由于内存无法容纳所有作业,因此只有少量作业能运行,导致多道程序并发度下降- 驻留性
一旦作业被装入内存,就会一直驻留在内存中,直至作业运行结束。事实上,在一个时间段内,只需要访问作业的一小部分数据即可正常运行,这就导致了内存中会驻留大量的、暂时用不到的数据,浪费了宝贵的内存资源
- 考研69
- 40854
- 计算机网络26
- 操作系统20
- 数学12
- 学习10
- 代码10
- 高数9
- 杂项7
- 数据结构7
- 实用文档3
- 期末考复习3
- 四阶段3
- 线性表2
- 备忘录1
- 介绍1
- 大数据1
- 英语1
- 政治1
- 一阶段1
- 二阶段1
- 三阶段1
- 算法1
- 队列1
- 栈1
- 线代1
内存的基础知识 👍
内存可存放数据。程序执行前需要先放到内存中才能被 CPU 处理——缓和 CPU 与硬盘之间的速度矛盾
内存地址从 0 开始,每个地址对应一个存储单元
内存中也有一个一个的“小房间”,每个小房间就是一个“存储单元”
如果计算机“按字节编址”则每个存储单元大小为 1 字节,即 1B ,即 8 个二进制位
如果字长为 16 位的计算机“按字编址”,则每个存储单元大小为 1 个字;每个字的大小为 16 个二进制位
一些数量单位
1 B = 8 位(bit)
1 KB = 1024 B = B
1 MB = 1024 KB = B
1 GB = 1024 MB = B
1 TB = 1024 GB = B
死锁的概念
每个人都占有一个资源同时又在等待另一个人手里的资源。发生“死锁”
在并发环境下,各进程因竞争资源而造成的一种互相等待对方手里的资源,导致各进程都阻塞,都无法向前推进的现象,就是“死锁”
发生死锁后若无外力干涉,这些进程都将无法向前推进
死锁、饥饿、死循环的区别
| 名称 | 解释 |
|---|---|
| 死锁 | 各进程互相等待对方手里的资源,导致各进程都阻塞,无法向前推进的现象 |
| 饥饿 | 由于长期得不到想要的资源,某进程无法向前推进的现象。比如:在短进程优先( SPF )算法中,若有源源不断的短进程到来,则长进程将一直得不到处理机,从而发生长进程“饥饿” |
| 死循环 | 某进程执行过程中一直跳不出某个循环的现象。有时是因为程序逻辑 bug 导致的,有时是程序员故意设计的 |
为何引入管程
在引入管程之前,进程间互斥同步的方式主要依靠信号量机制
但是信号量机制存在诸多问题:编写程序困难、易出错等
能不能设计一种机制,让程序员写程序时不需要再关注复杂的 PV 操作,让写代码更轻松呢?
1973年,Brinch Hansen 首次在程序设计语言( Pascal )中引入了“管程”成分——一种高级同步机制
管程的定义和基本特征
管程是一种特殊的软件模块,有这些部分组成:
- 局部于管程的共享数据结构声明
- 对该数据结构进行操作的一组过程(函数)
- 对局部于管程的共享数据设置初始值的语句
- 管程有一个名字
生产者-消费者问题
- 问题描述
系统中有一组生产者进程和一组消费者进程,生产者进程每次生产一个产品放入缓冲区,消费者进程每次从缓冲区中取出一个产品并使用。(注:这里的“产品”理解为某种数据)
生产者、消费者共享一个初始为空、大小为 n 的缓冲区
只有缓冲区没满时,生产者才能把产品放入缓冲区,否则必须等待(缓冲区没满→生产者生产)
只有缓冲区不空时,消费者才能从中取出产品,否则必须等待(缓冲区没空→消费者消费)
进程同步
同步亦称直接制约关系,它是指为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调它们的工作次序而产生的制约关系。进程间的直接制约关系就是源于它们之间的相互合作
并发性带来了异步性,有时需要通过进程同步解决这种异步问题。有的进程之间需要相互配合地完成工作,各进程的工作推进需要遵循一定的先后顺序
进程互斥
进程的“并发”需要“共享”的支持。各个并发执行的进程不可避免的需要共享一些系统资源(比如内存,又比如打印机、摄像头这样的 I/O 设备)
调度的概念
当有大量任务要处理,但由于资源有限,这些事情没法同时处理。这就需要确定某种规则来决定处理这些任务的顺序,这就是“调度”研究的问题
调度的三个层次
高级调度
内存空间有限,有时无法将用户提交的作业全部放入内存
高级调度(作业调度) —— 按一定的原则从外存的作业后备队列中挑选一个作业调入内存,并创建进程。每个作业只调入一次,调出一次。作业调入时会建立 PCB ,调出时才撤销 PCB
线程的概念
在没引入线程的概念之前,所有应用只能串行运行
有的进程可能需要“同时”做很多事,而传统的进程只能串行地执行一系列程序。为此,引入了“线程”,来增加并发度。
传统进程是程序执行流的最小单位,引入线程后,线程成为了程序执行流的最小单位,可以把线程理解为“轻量级进程”
线程是一个基本的 CPU 执行单元,也是程序执行流的最小单位。引入线程之后,不仅是进程之间可以并发,进程内的各线程之间也可以并发,从而进一步提升了系统的并发度,使得一个进程内也可以并发处理各种任务(如 QQ 视频、文字聊天、传文件等)
信号和信号量
信号量( Semaphore ) —— 实现进程间的同步、互斥
信号( Signal ) —— 实现进程间通信( IPC , Inter Process Communication )
考研大纲将信号定义为一种进程间的通信方式
信号的作用
信号( signal ):用于通知进程某个特定事件已经发生。进程收到一个信号后,对该信号进行处理
注意
- 不同的操作系统对信号类型的定义不一样
- 通常用宏定义常量表示信号名,如:
#define SIGINT 2
进程的概念
程序:是静态的,就是个存放在磁盘里的可执行文件,就是一系列的指令集合
进程( Process ):是动态的,是程序的一次执行过程,同一个程序多次执行会对应多个进程
进程的组成
一个进程实体(进程映像)由 PCB 、程序段、数据段组成:进程是动态的,进程实体(进程映像)是静态的。
程序段、数据段、 PCB 三部分组成了进程实体(进程映像)
引入进程实体的概念后,可把进程定义为:
进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位
