• [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 中最重要的结构,贯穿始终
    • 要操作寄存器完成切换
    • 要写调度程序
    • 要有进程同步与合作
    • 要有地址映射
  • 相关阅读:
    撕衣服的简易实现
    简易的画画板的实现
    图片简易处理
    在内存中创建原图的副本
    缩放图片并加载到内存中
    加载大图片的OOM异常
    计算机表示图形的形式
    虚拟短信
    ContentProvider 共享数据
    内容观察者
  • 原文地址:https://www.cnblogs.com/Chary/p/No000038.html
Copyright © 2020-2023  润新知