[No000038]操作系统Operating Systems -CPU
管理CPU ,先要使用CPU…
CPU 的工作原理
CPU上电以后发生了什么? 自动的取指 — 执行

- CPU 怎么工作?
- CPU怎么管理?
管理CPU 的最直观方法
设好PC 初值就完事!

看看这样做有没有问题? 提出问题

怎么解决?

现在变成了这个样子

多道程序、交替执行,好东西啊!


|
单道程序 |
多道程序 |
|
|
CPU 利用率 |
40/80=50% |
40/45=89% |
|
DEV1 利用率 |
15/80=18.75% |
15/45=33% |
|
DEV2 利用率 |
25/80=31.25% |
25/45=56% |
一个CPU面对多个程序?

一个CPU 上交替的执行多个程序: 并发
怎么做到?
修改寄存器PC 就行了吗?

运行的程序和静态程序不一样了…

引入"进程"概念
运行的程序和静态程序不一样!
- 需要描述这些不一样…(这些不一样就成了进程概念的外延)
- 程序 + 所有这些不一样 -> 一个概念(所有的不一样都表现在PCB 中…)
进程是进行(执行)中的程序
- 进程有开始、有结束,程序没有
- 进程会走走停停,走停对程序无意义
- 进程需要记录ax,bx,… ,程序不用
- …………
多进程图像Multiple Processes…
多个进程使用CPU的图像
如何使用CPU 呢?
- 让程序执行起来
如何充分利用CPU 呢?
- 启动多个程序,交替执行
启动了的程序就是进程,所以 是多个进程推进
- 操作系统只需要把这些进程 记录 好、要按照合理的次序推进(分配资源、进行调度)
- 这就是多进程图像…

多进程图像从启动开始到关机结束
main 中的fork() 创建了第1 个进程
- init 执行了shell(Windows 桌面)
if(!fork()){init();}
shell再启动其他进程
int main(int argc, char * argv[])
{ while(1) { scanf("%s", cmd);
if(!fork()) {exec(cmd);} wait(); } }
一命令启动一个进程,返回shell 再启动其他进程…

多进程图像:多进程如何组织?
有一个进程在执行

有一些进程等待执行

有一些进程再等待某事件

多进程的组织:PCB+ 状态+ 队列
运行 → 等待; 运行 → 就绪; 就绪 → 运行……

- 该图称为 进程状态图
- 它能给出进程生存期的清晰描述
- 它是认识操作系统进程管理的一个窗口
多进程图像:多进程如何交替?
启动磁盘读写;
pCur.state = 'W';
将pCur 放到DiskWaitQueue;
schedule();
schedule()
{
pNew = getNext(ReadyQueue);
switch_to(pCur,pNew);
}
交替的三个部分:队列操作+ 调度+ 切换
就是进程调度,一个很深刻的话题
FIFO?
FIFO 显然是公平的策略
FIFO 显然没有考虑进程执行的任务的区别
Priority?
优先级该怎么设定? 可能会使某些进程饥饿
switch_to(pCur,pNew) {
pCur.ax = CPU.ax;
pCur.bx = CPU.bx;
...
pCur.cs = CPU.cs;
pCur.retpc = CPU.pc;
CPU.ax = pNew.ax;
CPU.bx = pNew.bx;
...
CPU.cs = pNew.cs;
CPU.retpc = pNew.pc; }


多进程图像:多进程如何影响?
多个进程同时在存在于内存会出现下面的问题

解决的办法:限制对地址100 的读写
多进程的地址空间分离: 内存管理的主要内容
进程执行时的100…

- 进程1 的映射表将访问限制在进程1 范围内
- 进程1 根本访问不到其他进程的内容
- 内存管理…
进程带动内存的使用
为什么说进程管理连带内存管理形成多进程图像?

多进程图像:多进程如何合作?
想一想打印工作过程
- 应用程序提交打印任务
- 打印任务被放进打印队列
- 打印进程从队列中取出任务
- 打印进程控制打印机打印

从纸上到实际:生产者− 消费者实例


两个合作的进程都要修改counter


核心在于进程同步(合理的推进顺序)
写counter 时阻断其他进程访问counter


如何形成多进程图像?

- 读写PCB ,OS 中最重要的结构,贯穿始终
- 要操作寄存器完成切换
- 要写调度程序
- 要有进程同步与合作
- 要有地址映射
[No000038]操作系统Operating Systems -CPU的更多相关文章
- [No00003D]操作系统Operating Systems信号量的代码实现Coding Semaphore &死锁处理Deadlock
操作系统Operating Systems信号量的代码实现Coding Semaphore &死锁处理Deadlock 可以操刀了—从纸上到实际 从Linux 0.11 那里学点东西… 读磁盘 ...
- [No00003C]操作系统Operating Systems进程同步与信号量Processes Synchronization and Semaphore
操作系统Operating Systems进程同步与信号量Processes Synchronization and Semaphore 进程合作:多进程共同完成一个任务 从纸上到实际:生产者− − ...
- [No00003A]操作系统Operating Systems 内核级线程Kernel Threads内核级线程实现Create KernelThreads
开始核心级线程 内核级线程对多核的支持怎么样? 和用户级相比,核心级线程有什么不同? ThreadCreate 是系统调用,内核管理TCB ,内核负责切换线程 如何让切换成型? − − 内核栈,TCB ...
- [No000037]操作系统Operating Systems操作系统历史与硬件概况History of OS & Summaries!
培根:读史使人明智 操作系统的简史 (1955-1965) 计算机非常昂贵,上古神机IBM7094 ,造价在250万美元以上 计算机使用原则:只专注于计算 批处理操作系统(Batch system) ...
- [No000031]操作系统 Operating Systems 之Open the OS!
从打开电源开始… 这神秘的黑色背后发生着什么?… 打开电源,计算机执行的第一句指令什么? 计算模型(图灵机) ⇒ 我们要 关注 指针IP 及其 指向的内容 看看x86 PC (1) 刚开机时CPU 处 ...
- [No000036]操作系统Operating Systems系统调用的实现System_Call
实现一个whoami 系统调用 系统调用的直观实现 问题+直观想法… 用户程序调用whoami, 一个字符串"systemcall "放在操作系统中(系统引导时载入) ,取出来打印 ...
- [No000039]操作系统Operating Systems用户级线程User Threads
多进程是操作系统的基本图像 是否可以资源不动而切换指令序列? 进程 = 资源 + 指令执行序列 线程: 保留了并发的优点,避免了进程切换代价 实质就是映射表不变而PC 指针变 多个执行序列+ 一个地址 ...
- Modern Operating Systems(Ⅰ)——2014.12.15
进程 进程模型 进程就是一个正在执行的程序的实例 值得注意的是,若一个程序运行了两遍,则算作两个进程 创建进程 在通用系统中,有四种主要事件导致进程的创建 ①系统的初始化 ②执行了 正在 ...
- Operating Systems (COMP2006)
Operating Systems (COMP2006) 1st Semester 2019Page 1, CRICOS Number: 00301JOperating Systems (COMP20 ...
随机推荐
- NSoperation用法详解及与GCD的比较
NSInvocationOperation // 基于一个对象和selector来创建操作.如果你已经有现有的方法来执行需要的任务,就可以使用这个类 NSInvocationOperation * o ...
- Android微信登陆
前言 分享到微信朋友圈的功能早已经有了,但微信登录推出并不久,文档写的也并不是很清楚,这里记录分享一下. 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.co ...
- 基于ruby的watir自动化测试 笔记一
基于Ruby的watir-webdriver自动化测试方案与实施(五) 基于Ruby的watir-webdriver自动化测试方案与实施(四) 基于Ruby的watir-webdriver自动 ...
- MySQL 数据库双向镜像、循环镜像(复制)
在MySQL数据库镜像的贴子中,主数据库A 的数据镜像到从数据库B,是单向的,Zen Cart网店的数据读写都必须在数据库A进行,结果会自动镜像到数据库B中.但是对数据库B的直接操作,不会影响数据库A ...
- #VSTS日志# 2015/12/10 – 终于可以删除工作项了
最近的更新不少,废话少说,直接上干货 定制工作项字段 本周的更新后,所有的用户都可以在vsts上直接给工作项添加字段了,具体内容包括– 添加新字段(日期,字符串,整形,数字)– 字段显示位置配置– 过 ...
- 挖一挖C#中那些我们不常用的东西之系列(5)——FlagAttribute
说到FlagsAttribute,源自前几天看到了一小段代码,大概意思就是根据航班政策来返回哪些配送方式是否可用,根据这些是否可用 来隐藏或者开启界面的相关配送方式,如果大家订过机票可能知道配送方式有 ...
- Consul 启动命令
服务端: nohup consul agent -server -bootstrap-expect 1 -config-dir /etc/consul.d/ -data-dir /var/opt/co ...
- PHP 取前一天或后一天、一个月时间
//获得当前时间 //date()格式化时间返回String类型. date("Y-m-d H:i:s") $current_date = date(’Y-m-d’ ...
- boneCP原理研究
** 转载请注明源链接:http://www.cnblogs.com/wingsless/p/6188659.html boneCP是一款关注高性能的数据库连接池产品 github主页 . 不过最近作 ...
- Spring MVC - 配置Spring MVC
写在前面的话: 现在开始一段新的学习历程:Spring MVC.还是按照原来的三步走学习模式(what.why.how)进行讲解. 1.Spring MVC是什么(what) Spring MVC属于 ...