美文网首页
操作系统是如何管理CPU的

操作系统是如何管理CPU的

作者: yangc随想 | 来源:发表于2018-05-10 23:40 被阅读0次

    CPU的工作原理

    1.将一个程序放在内存中,然后设置一个地址
    2.cpu根据地址发出取指指令,将设置的地址中的指令放在地址总线上,将该指令传到CPU中
    3.CPU开始解释执行该指令  
    4.地址自动累加,看取一条指令,执行一条指令
    

    tips

    io指令与正常指令的执行时间比为570000:1(电脑不同可能比值不同,不过还是很大)
    大部分时间都在读取数据(io操作),意味着CPU几乎是空闲的
    

    如何让CPU忙碌起来??

    多个程序,交替执行(并发)
    切换的时候记录信息,切时程序的样子。
    

    如何查看电脑中的进程

    打开任务管理器就能看到有多少进程,每一个程序都会开启一个进程
    

    多进程如何组织(操作系统组织的核心)

    PCB(Process Control Block):用来记录进程信息和数据结构
    多个进程所对应的PCB(磁盘队列、就绪队列等)分别放在不同的地方,操作系统都知道。
    
    操作系统进程状态图: image.png

    多个进程是如何交替的

    1.  启动磁盘读写    //假设正在启动
    2. pCur.state = 'W'   //将状态设置为wait
    3.  然后将pCur放到等待队列DiskWaitQueue
    4.  schedule();          //开始切换进程
    
    schedule()
    {
      pNew=getNext(ReadyQueue);      //从就绪态取一个
      switch_to(pCur,pNew);                  //切换
    }
    
    switch_to(pCur,pNew){
        定义一个结构体,将CPU的东西保存
        将新的信息在赋值给CPU
    }
    

    多个进程通过映射表使得不同的进程不会影响

    生产者模型

    while(true)
    {
      while(counter==BUFFER_SIZE);          //缓存区满,消费者停滞
      
      buffer[in]=item;
      in =(in+1)%BUFFER_SIZE;
      counter++;
    }
    

    消费者模型

    while(true)
    {
      while(counter==0);                    //缓冲区空,消费者停
      
      item=buffer[out];
      out=(out+1)%BUFFERSIZE;
      out--;
    }
    

    线程切换

    TCB原来保存栈以及栈执行的地址(切换不同的线程,就有不同的栈)(一套栈中切换)
    指令切换,映射表资源不切换
    缺点:切一个进程这个进程里面所有的线程都不执行了
    
    多处理器每个处理器(CPU)都有自己的MMU
    多核多个CPU都共享一个MMU(内存映射)
    

    操作系统两套栈

    TCB切换两套栈
    用户栈
    内核栈
    

    CPU调度策略

    周转时间:到达的时间到任务完成的时间
    响应时间:任务从到达到开始处理的时间
    平均周转时间:周转时间/任务数
    
    FCFS(First Come,First Served)
    先来先服务
    
    SJF(短作业优先)
    周转时间最短
    
    GCC(优先级调度)
    指按优先级进行执行
    
    RR(时间片)
    

    进程同步

    让进程走走停停,保证多进程合作的合理有序
    

    信号量临界区与保护

    轮换法 image.png 标记法 image.png 非对称标记(结合标记和轮转) image.png
    多个进程----面包店算法(标记轮转结合) image.png
    特点
    互斥进入
    有空让进
    有限等待
    

    硬件原子指令

    while(TestAndSet(&lock));
            临界区
    lock=false;
    剩余区
    
    boolean TestAndSet(boolean &x)
    {
        boolean lv=x;
        x=true;
        return lv;
    }
    

    相关文章

      网友评论

          本文标题:操作系统是如何管理CPU的

          本文链接:https://www.haomeiwen.com/subject/rcfuhftx.html