管理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的更多相关文章

  1. [No00003D]操作系统Operating Systems信号量的代码实现Coding Semaphore &死锁处理Deadlock

    操作系统Operating Systems信号量的代码实现Coding Semaphore &死锁处理Deadlock 可以操刀了—从纸上到实际 从Linux 0.11 那里学点东西… 读磁盘 ...

  2. [No00003C]操作系统Operating Systems进程同步与信号量Processes Synchronization and Semaphore

    操作系统Operating Systems进程同步与信号量Processes Synchronization and Semaphore 进程合作:多进程共同完成一个任务 从纸上到实际:生产者− − ...

  3. [No00003A]操作系统Operating Systems 内核级线程Kernel Threads内核级线程实现Create KernelThreads

    开始核心级线程 内核级线程对多核的支持怎么样? 和用户级相比,核心级线程有什么不同? ThreadCreate 是系统调用,内核管理TCB ,内核负责切换线程 如何让切换成型? − − 内核栈,TCB ...

  4. [No000037]操作系统Operating Systems操作系统历史与硬件概况History of OS & Summaries!

    培根:读史使人明智 操作系统的简史 (1955-1965) 计算机非常昂贵,上古神机IBM7094 ,造价在250万美元以上 计算机使用原则:只专注于计算 批处理操作系统(Batch system) ...

  5. [No000031]操作系统 Operating Systems 之Open the OS!

    从打开电源开始… 这神秘的黑色背后发生着什么?… 打开电源,计算机执行的第一句指令什么? 计算模型(图灵机) ⇒ 我们要 关注 指针IP 及其 指向的内容 看看x86 PC (1) 刚开机时CPU 处 ...

  6. [No000036]操作系统Operating Systems系统调用的实现System_Call

    实现一个whoami 系统调用 系统调用的直观实现 问题+直观想法… 用户程序调用whoami, 一个字符串"systemcall "放在操作系统中(系统引导时载入) ,取出来打印 ...

  7. [No000039]操作系统Operating Systems用户级线程User Threads

    多进程是操作系统的基本图像 是否可以资源不动而切换指令序列? 进程 = 资源 + 指令执行序列 线程: 保留了并发的优点,避免了进程切换代价 实质就是映射表不变而PC 指针变 多个执行序列+ 一个地址 ...

  8. Modern Operating Systems(Ⅰ)——2014.12.15

    进程   进程模型     进程就是一个正在执行的程序的实例  值得注意的是,若一个程序运行了两遍,则算作两个进程 创建进程 在通用系统中,有四种主要事件导致进程的创建 ①系统的初始化 ②执行了 正在 ...

  9. Operating Systems (COMP2006)

    Operating Systems (COMP2006) 1st Semester 2019Page 1, CRICOS Number: 00301JOperating Systems (COMP20 ...

随机推荐

  1. CAShaperLayer的应用

    关于CAShapeLayer的一些实用案例和技巧 实现遮罩 音量大小动态改变的控件 圆形进度条 iOS 利用CAShapeLayer的FillRule属性生成一个空心遮罩的layer fillrule ...

  2. Android 手机卫士--解析json与消息机制发送不同类型消息

    本文地址:http://www.cnblogs.com/wuyudong/p/5900800.html,转载请注明源地址. 1.解析json数据 解析json的代码很简单 JSONObject jso ...

  3. 安装pods 遇到的坑

    1.  ERROR:  While executing gem ... (Errno::EPERM) Operation not permitted - /usr/bin/pod 苹果系统升级 OS ...

  4. 【读书笔记】iOS-ARC-不要向已经释放的对象发送消息

    一,在AppDelegate.m中写入如下代码: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOpti ...

  5. MySql链接字符串 各种程序连接大合集(包括asp.net,c#,等等)

    一.MySQL Connector/ODBC 2.50 (MyODBC 2.50)连接方式 1.本地数据库连接Driver={MySQL};Server=localhost;Option=16834; ...

  6. AEAI DP按钮权限配置说明

    1 背景概述 AEAI DP3.5版本以后支持对按钮权限进行灵活的管理配置,本文对配置过程进行详细说明,为相关使用人员提供指导和参考. 2 预期读者 数通畅联技术人员 AEAI DP开发平台使用人员 ...

  7. MySQL锁问题

    MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISAM和MEMORY存储引擎 采用的是表级锁:BDB存储引擎采用的是页面锁,但也支持表级锁:InnoDB存储引擎 ...

  8. Windows搭建python开发环境,python入门到精通[一]

    从大学开始玩python到现在参加工作,已经有5年了,现在的公司是一家.net的公司用到python的比较少,最近公司有新项目需要用到python,领导希望我来跟其他同事training,就有了这篇博 ...

  9. net-snmp添加自定义MIB

    我所知道的添加自定义MIB的方法有三种   1.静态加载,将生成的.c和.h文件加入到相应的位置,重新编译snmp库,优点是不需要修改配置文件,缺点是每次添加都得重新编译: 2.动态加载,将生成的.c ...

  10. Sybase PowerDesign 导入数据库结构formSqlserver

    采用Sybase PD 创建数据库设计是常见的方法,如果遇到链接数据源时,无法直接链接系统数据源,而且在Sybase PD中无法直接创建odbc数据源时, 可以到控制面板中创建数据源,一步步的网络上有 ...