当前课程知识点:操作系统 > 第十一讲 进程和线程 > 11.1 进程的概念 > 11.1 进程的概念
今天我们开始介绍进程和线程
进程和线程呢实际上讨论的是
操作系统在让一个程序
执行的过程当中
这个执行的过程
我们是如何在维护的
那今天呢我们首先来讲进程
在实际的操作系统当中
我们有一组工具
可以让你知道一个程序
它执行的状态是什么样的
比如说这个执行的是哪一个程序
然后它目前占用内存是多少
然后CPU的使用时间是多少
那这地方都是它的相关信息
那这时候有一个问题
程序和程序的执行
也就是我们这里说的
进程它到底是什么样的关系
那我们首先呢对进程给一个定义
进程是一个具有一定功能的程序
在一个数据集上的一次动态的执行
那我们说程序肯定是具有功能的
那我们在这里进程多加的两个属性
是数据和动态执行
有了这个程序
加上数据和动态执行之后呢
就变成我们的进程
那这是我们在前面讲的时候
我写的程序那这是它的源代码
然后源代码我们经过编译之后呢
变成目标文件
这时候有我们前面讲的地址的转换
然后在加载的时候呢
把它放到内存里头
我们把一个程序
放到内存里的目标是什么
就是为了让它对数据进行处理
让它能够执行
那这就是我们这里头数据和执行
那进程呢就是讨论这个
程序在对数据进行处理的时候
这个处理过程
操作系统是如何维护的
那我们换个角度来看一下
进程和程序之间的变化的内容
这是我们的源代码
你写出来的静态的程序
好这个程序在被加到内存当中的
我们首先以一种形式
把它的代码放在这里头
然后在这上面又加了一段
这就是我们的 堆 栈 和数据 数据段
这些内容呢实际上是为了
让我这程序在执行的
过程当中进行维护的
比如说我这里有函数调用
那函数调用和返回的地址呢
就必须写到我的堆栈里头
以便于我知道
进到一个函数里头是从哪过去的
回来的时候我要回到什么地方去
那这是呢
这个进程在和程序
相比较而言我们加的内容
那进程到底有些什么样的组成呢
简单的来说进程包括
程序执行的所有状态
那具体说起来呢
包括这样一些代码数据
这是我们在前面提到过的
但更多的呢是我们这里
现在执行过程当中状态
你比如状态寄存器通用寄存器
和进程所占用的资源
这些内容呢最后会构成
我们在进程里一个
很重要的组成部分叫进程控制块
好这些内容呢搁到一起
由于操作系统提供了进程概念
好那我们进程在这里呢
就体现出这样一些特征
一种呢是动态性
那说我的一个程序它在执行的过程当中
有从创建到结束这个过程
第二个呢是并发性
那么我们通常所说的程序执行
它只是一个指令指针在执行
那我们有了操作系统之后
这时候可以交替执行多个程序
这个多个程序呢它可以在
操作系统的调度下占用CPU来执行
这种交替性呢就可以体现出
我们在宏观上的一种并发性
再有一个呢是独立性
不同的进程呢我们希望
它们之间的工作呢相互不影响
这是它的独立性
但是另外一个呢
它还有一个特征叫制约性
也就是说我两个或者多个进程
在同一个操作系统下运行的时候
它们就会由于共享数据
或者说资源进程之间的通讯和
同步产生相互之间制约
这时候我们就需要有一个
需要仔细把握的地方就是在于
进程的独立性和制约性
它们俩之间我怎么来权衡
我们希望一个程序的执行是独立的
但是我们同时也希望一个程序
在执行过程中能够跟外界打交道
这样的话我才能用同一个程序
对不同的数据进行处理
好那下边呢我们通过
这样一个图示来说程序进程
和我们在原来的CPU上执行的程序
它怎么就体现出上面这几个特征来
那我们这地方看到这条线索呢
你可以理解为进程CPU
在执行指令的时候的情况
执行进程A的指令
然后切换到进程B
执行进程B的指令
这个切换呢有一段进程切换的代码
交替切换到最后然后再绕回来
这时候我们看到
物理的CPU上的指令指针
它还是任何一个时刻
只执行一条指令
好这有一个执行的顺序
那在操作系统管理下
我们把这个切换代码
作为一个独立的部分来看待
我们可以观察
各个进程内部它自己的执行状态
好这时候呢我们就把
一个CPU里头物理的指令指针
转变成了四个并发执行的进程
的指令指针
A B C D
应用程序在做的时候
只观察你所关心的进程A B或者C D里头
它的执行的情况
那这是一个 啊 这是体现出四个
好这种特征我们从时间轴上
可以看到一种什么样的特征
就是ABCD四个进程
在时间轴上它们是交替运行的
宏观上它是并发执行的
好 有了这些讨论之后
我们需要来强调一下
进程和程序之间的联系
和它们之间的区别
它们之间的联系是什么呢
进程是处于运行状态下的
程序的抽象
和程序是相关的
好程序呢是一个静态的文件
你比如说你的源代码
或者说可执行文件
而进程呢是执行中的程序
除了程序之外它还有它的执行状态
然后进程同一个程序的
多次执行对应着不同的进程
那我们不同的程序呢
它的代码肯定是不一样的
比如说在这里头我同一个命令
IS多次执行它对应的是不同的进程
那进程执行呢除了我们的程序之外
还需要其它的一些资源
比如说我们在这里头内存和CPU
内存负责保存代码和数据
CPU呢是用来执行指令的
这是它们之间联系
它们之间的区别呢
我们刚才说了一静一动
程序是有序代码的集合
而进程呢是程序的执行
它有用户态和内核态的切换
然后进程是暂时的
程序是永久的
程序我可以放到一个文件系统里头
那它就可以长期保存
而进程呢它总是有一个开始
一个结束
一个变化的过程
这个结束了
那这个进程也就不存在了
而进程和程序
它们的组成呢是不一样的
进程除了你的程序
还包括数据和控制信息
进程控制块
好 那到现在呢
我们就对进程的大致的情况呢
有一个基本的介绍
-0.1 Piazza讨论区
--html
-0.2 在线实验平台
--实验平台使用帮助
--平台使用帮助
-0.2在线实验平台
--Raw HTML
-1.1 课程概述
--视频
-第一讲 操作系统概述--练习
-1.2 教学安排
--视频
-1.3 什么是操作系统
--Video
-1.4 为什么学习操作系统,如何学习操作系统
--Video
-1.5 操作系统实例
--视频
-1.6 操作系统的演变
--视频
-1.7 操作系统结构
--视频
-2.1 前言和国内外现状
-2.2 OS实验目标
-2.3 8个OS实验概述
-2.4 实验环境搭建
-2.5 x86-32硬件介绍
-2.6 ucore部分编程技巧
-2.7 演示实验操作过程
--Q6
--Q7
--Q10
-3.1 BIOS
--3.1 BIOS
-3.2 系统启动流程
-3.3 中断、异常和系统调用比较
-第三讲 启动、中断、异常和系统调用--3.3 中断、异常和系统调用比较
-3.4 系统调用
--3.4 系统调用
-第三讲 启动、中断、异常和系统调用--3.4 系统调用
-3.5 系统调用示例
-3.6 ucore+系统调用代码
-4.1 启动顺序
--4.1 启动顺序
-4.2 C函数调用的实现
-4.3 GCC内联汇编
-4.4 x86中断处理过程
-4.5 练习一
--4.5 练习一
-4.6 练习二
--4.6 练习二
-4.7 练习三
--4.7 练习三
-4.8 练习四 练习五
-4.9 练习六
--4.9 练习六
-5.1 计算机体系结构和内存层次
-5.2 地址空间和地址生成
-5.3 连续内存分配
-5.4 碎片整理
--5.4 碎片整理
-5.5 伙伴系统
--5.5 伙伴系统
-第五讲 物理内存管理: 连续内存分配--5.6 练习
-6.1 非连续内存分配的需求背景
-6.2 段式存储管理
-- 6.2 段式存储管理
-6.3 页式存储管理
-6.4 页表概述
--6.4 页表概述
-6.5 快表和多级页表
-6.6 反置页表
--6.6 反置页表
-6.7 段页式存储管理
-第六讲 物理内存管理: 非连续内存分配--6.8 练习
-7.1 了解x86保护模式中的特权级
-第七讲 实验二 物理内存管理--7.1 了解x86保护模式中的特权级
-7.2 了解特权级切换过程
-第七讲 实验二 物理内存管理--7.2 了解特权级切换过程
-7.3 了解段/页表
-第七讲 实验二 物理内存管理--7.3 了解段/页表
-7.4 了解UCORE建立段/页表
-第七讲 实验二 物理内存管理--7.4 了解UCORE建立段/页表
-7.5 演示lab2实验环节
-8.1 虚拟存储的需求背景
-8.2 覆盖和交换
-8.3 局部性原理
-8.4 虚拟存储概念
-8.5 虚拟页式存储
-8.6 缺页异常
--8.6 缺页异常
-9.1 页面置换算法的概念
-9.2 最优算法、先进先出算法和最近最久未使用算法
-第九讲 页面置换算法--9.2 最优算法、先进先出算法和最近最久未使用算法
-9.3 时钟置换算法和最不常用算法
-第九讲 页面置换算法--9.3 时钟置换算法和最不常用算法
-9.4 Belady现象和局部置换算法比较
-第九讲 页面置换算法--9.4 Belady现象和局部置换算法比较
-9.5 工作集置换算法
-第九讲 页面置换算法--9.5 工作集置换算法
-9.6 缺页率置换算法
-第九讲 页面置换算法--9.6 缺页率置换算法
-9.7 抖动和负载控制
-10.1 实验目标:虚存管理
-第十讲 实验三 虚拟内存管理--10.1 实验目标:虚存管理
-10.2 回顾历史和了解当下
-第十讲 实验三 虚拟内存管理--10.2 回顾历史和了解当下
-10.3 处理流程、关键数据结构和功能
-第十讲 实验三 虚拟内存管理--10.3 处理流程、关键数据结构和功能
-10.4 页访问异常
-第十讲 实验三 虚拟内存管理--10.4 页访问异常
-10.5 页换入换出机制
-第十讲 实验三 虚拟内存管理--10.5 页换入换出机制
-11.1 进程的概念
-第十一讲 进程和线程--11.1 进程的概念
-11.2 进程控制块
-第十一讲 进程和线程--11.2 进程控制块
-11.3 进程状态
-第十一讲 进程和线程--11.3 进程状态
-11.4 三状态进程模型
-11.5 挂起进程模型
-第十一讲 进程和线程--11.5 挂起进程模型
-11.6 线程的概念
-第十一讲 进程和线程--11.6 线程的概念
-11.7 用户线程
-第十一讲 进程和线程--11.7 用户线程
-11.8 内核线程
-第十一讲 进程和线程--11.8 内核线程
-12.1 进程切换
-第十二讲 进程控制--12.1 进程切换
-12.2 进程创建
-第十二讲 进程控制--12.2 进程创建
-12.3 进程加载
-第十二讲 进程控制--12.3 进程加载
-12.4 进程等待与退出
-第十二讲 进程控制--12.4 进程等待与退出
-13.1 总体介绍
-13.2 关键数据结构
-13.3 执行流程
-13.4 实际操作
-14.1 总体介绍
-14.2 进程的内存布局
-14.3 执行ELF格式的二进制代码-do_execve的实现
--14.3 执行ELF格式的二进制代码-do_execve的实现
-14.4 执行ELF格式的二进制代码-load_icode的实现
--14.4 执行ELF格式的二进制代码-load_icode的实现
-14.5 进程复制
-14.6 内存管理的copy-on-write机制
-15.1 处理机调度概念
-第十五讲 处理机调度--15.1 处理机调度概念
-15.2 调度准则
-15.3 先来先服务、短进程优先和最高响应比优先调度算法
--15.3 先来先服务、短进程优先和最高响应比优先调度算法
-第十五讲 处理机调度--15.3 先来先服务、短进程优先和最高响应比优先调度算法
-15.4 时间片轮转、多级反馈队列、公平共享调度算法和ucore调度框架
--15.4 时间片轮转、多级反馈队列、公平共享调度算法和ucore调度框架
-第十五讲 处理机调度--15.4 时间片轮转、多级反馈队列、公平共享调度算法和uc
-15.5 实时调度和多处理器调度
-第十五讲 处理机调度--15.5 实时调度和多处理器调度
-15.6 优先级反置
-第十五讲 处理机调度--15.6 优先级反置
-16.1 总体介绍和调度过程
-16.2 调度算法支撑框架
-16.3 时间片轮转调度算法
-16.4 Stride调度算法
-17.1 背景
--17.1 背景
-17.2 现实生活中的同步问题
-第十七讲 同步互斥--17.2 现实生活中的同步问题
-17.3 临界区和禁用硬件中断同步方法
-第十七讲 同步互斥--17.3 临界区和禁用硬件中断同步方法
-17.4 基于软件的同步方法
-第十七讲 同步互斥--17.4 基于软件的同步方法
-17.5 高级抽象的同步方法
-第十七讲 同步互斥--17.5 高级抽象的同步方法
-18.1 信号量
--18.1 信号量
-第十八讲 信号量与管程--18.1 信号量
-18.2 信号量使用
-第十八讲 信号量与管程--18.2 信号量使用
-18.3 管程
--18.3 管程
-第十八讲 信号量与管程--18.3 管程
-18.4 哲学家就餐问题
-18.5 读者-写者问题
-19.1 总体介绍
-19.2 底层支撑
-第十九讲 实验七 同步互斥--19.2 底层支撑
-19.3 信号量设计实现
-第十九讲 实验七 同步互斥--19.3 信号量设计实现
-19.4 管程和条件变量设计实现
-第十九讲 实验七 同步互斥--19.4 管程和条件变量设计实现
-19.5 哲学家就餐问题
-20.1 死锁概念
-第二十讲 死锁和进程通信--20.1 死锁概念
-20.2 死锁处理方法
-第二十讲 死锁和进程通信--20.2 死锁处理方法
-20.3 银行家算法
-第二十讲 死锁和进程通信--20.3 银行家算法
-20.4 死锁检测
-第二十讲 死锁和进程通信--20.4 死锁检测
-20.5 进程通信概念
-第二十讲 死锁和进程通信--20.5 进程通信概念
-20.6 信号和管道
-第二十讲 死锁和进程通信--20.6 信号和管道
-20.7 消息队列和共享内存
-第二十讲 死锁和进程通信--20.7 消息队列和共享内存
-21.1 文件系统和文件
-第二十一讲 文件系统--21.1 文件系统和文件
-21.2 文件描述符
-第二十一讲 文件系统--21.2 文件描述符
-21.3 目录、文件别名和文件系统种类
-第二十一讲 文件系统--21.3 目录、文件别名和文件系统种类
-21.4 虚拟文件系统
-第二十一讲 文件系统--21.4 虚拟文件系统
-21.5 文件缓存和打开文件
-第二十一讲 文件系统--21.5 文件缓存和打开文件
-21.6 文件分配
-第二十一讲 文件系统--21.6 文件分配
-21.7 空闲空间管理和冗余磁盘阵列RAID
-第二十一讲 文件系统--21.7 空闲空间管理和冗余磁盘阵列RAID
-22.1 总体介绍
-第二十二讲 实验八 文件系统--22.1 总体介绍
-22.2 ucore 文件系统架构
-第二十二讲 实验八 文件系统--22.2 ucore 文件系统架构
-22.3 Simple File System分析
-第二十二讲 实验八 文件系统--22.3 Simple File System分析
-22.4 Virtual File System分析
-第二十二讲 实验八 文件系统--22.4 Virtual File System分
-22.5 I/O设备接口分析
-第二十二讲 实验八 文件系统--22.5 I/O设备接口分析
-22.6 执行流程分析
-23.1 I/O特点
--视频
-第二十三讲 I/O子系统--23.1 I/O特点
-23.2 I/O结构
--816C80A0F5E3B8809C33DC5901307461
-第二十三讲 I/O子系统--23.2 I/O结构
-23.3 I/O数据传输
--C58221E14388B9DB9C33DC5901307461
-第二十三讲 I/O子系统--23.3 I/O数据传输
-23.4 磁盘调度
--567A3F1FCBFB3F4C9C33DC5901307461
-第二十三讲 I/O子系统--23.4 磁盘调度
-23.5 磁盘缓存
--C327536B80D25CE79C33DC5901307461
-第二十三讲 I/O子系统--23.5 磁盘缓存
-html
--html