• 操作系统管理CPU的直观想法


    CPU的工作原理

    要想管理CPU,就要先学会如何使用CPU。我们先从一个程序的执行来看看CPU是如何工作的。

    void main(){
        int i , sum;
        for(i = 0; i < 100000; i++){
            sum = sum + i;
        }
        printf("%d",sum);
    }

    如果我们想要执行上面的一个程序,首先我们需要把该程序放到内存中,然后给PC寄存器设置成存放该程序的内存首地址,比如把PC设置成50,CPU通过地址总线找到地址为50的内存,取出第一条指令并执行,并使PC加1指向下一条指令,CPU再取址执行。这个过程CPU是自动取址执行的

    从上面的程序可以知道,如果想让CPU工作起来,只需要给PC寄存器设置一个初值,就可以让CPU自动工作了。

    什么是并发

    我们来分别运行一下下面两个程序

    //程序1
    void main(){
        int i , sum;
        for(i = 0; i < 100000; i++){
            sum = sum + i;
        }
        sum = sum + 1;
    
    }
    //运行时间为:0.324s
    //程序2
    void main(){
        int i , sum;
        for(i = 0; i < 100000; i++){
            sum = sum + i;
        }
        //sum = sum + 1;
        printf("%d",sum);
    }
    //运行时间为:0.413s

    实际上第二个程序是用一个IO操作指令代替了一条运算指令。上述结果表明执行一条运算指令的时间和执行一条IO指令的时间之比为1:105,IO操作比计算操作慢非常多,一般来说是好几个数量级。在进行IO操作的时候CPU是不工作的,如果让一个程序执行完后再去处理另一个程序,势必会造成CPU的利用率变低。所以为了CPU的利用率,在多道程序之间来回切换着使用CPU使CPU的利用率有效提高是非常重要的。

    我们称一个CPU交替执行多个程序为:并发

    进程概念的引入

    我们知道要提高CPU的利用率,可以让CPU并发的执行多道程序,那么如何做到并发呢?

    需要把程序执行的地址切换到另外一个程序的首地址,然后CPU自动的取址、执行。通过PC寄存器(指示指令在存储器中的存放位置,也就是地址信息,在汇编中用寄存器IP表示PC)进行地址的切换。实际上仅仅切换PC是不够的,还需要还原该程序之前执行的信息,所以每个程序有了一个存放信息的结构:PCB。进程控制块(PCB)相当于一个结构体,包含进程状态程序计数器、CPU寄存器、CPU调度信息、内存管理信息、计数信息、IO状态等信息。

    为了与静态程序相区分,我们称运行中的程序为进程。与静态程序相比,进程保存着用于控制和管理进程的所有信息,以便当程序再次执行的时候能够恢复到上次执行的状态进行执行。

    多进程视图

    我们知道操作系统的核心功能就是管理计算机硬件资源,由如何更好的利用CPU资源引出了对CPU的管理(操作系统对CPU的切换、调度和控制)。由对CPU的管理以便更好的利用CPU资源引出了多进程视图(多个进程在CPU上交替执行的样子)。

  • 相关阅读:
    图论小测
    有关连通性
    差分约束
    php中代码执行&&命令执行函数【转载】
    Boss直聘的一个csrf与url跳转漏洞(已经修复)
    Immunity Canvas初体验加操作指南
    SSRF复习版本
    XXE漏洞复习版本
    信息收集汇总
    web前端逆向初体验
  • 原文地址:https://www.cnblogs.com/yuliangbin/p/8889766.html
Copyright © 2020-2023  润新知