CPU的工作原理

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

void main(){
int i , sum;
for(i = ; i < ; 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 = ; i < ; i++){
sum = sum + i;
}
sum = sum + ; }
//运行时间为:0.324s
//程序2
void main(){
int i , sum;
for(i = ; i < ; 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上交替执行的样子)。

操作系统管理CPU的直观想法的更多相关文章

  1. 操作系统之CPU管理的直观想法

    计算机:是工具,帮助解决实际问题 操作系统,是为了方便使用硬件 计算机模型: 图灵机,模拟人类计算 起初的图灵机就像一个只会做一道菜的厨师 通用图灵机,核心是设置控制器动作(修改控制器),把逻辑读入控 ...

  2. CPU被夺走的三种状态 执行时间久了 IO操作让cpu等待 被优先级高的抢占

    CPU被夺走的三种状态   执行时间久了    IO操作让cpu等待  被优先级高的抢占

  3. 操作系统-CPU管理的直观想法

    1. 管理CPU,先要使用CPU 管理CPU的最直观方法 2. 提出问题 有IO指令执行的特别慢,当cpu执行计算指令很快,遇到IO指令cpu进行等待,利用率不高. 使用多道程序.交替执行,这样cpu ...

  4. 关于CPU的一些操作(CPU设置超频)

    常见的几种CPU模式: .ondemand:系统默认的超频模式,按需调节,内核提供的功能,不是很强大,但有效实现了动态频率调节,平时以低速方式运行,当系统负载提高时候自动提高频率.以这种模式运行不会因 ...

  5. 操作系统学习笔记4 | CPU管理 && 多进程图像

    操作系统的核心功能就是管理计算机硬件,而CPU就是计算机中最核心的硬件.而通过学习笔记3的简史回顾,操作系统通过多进程图像实现对CPU的管理.所以多进程图像是操作系统的核心图像. 参考资料: 课程:哈 ...

  6. 操作系统--进程管理1--单个CPU情况

    1.进程概念 进程:一个正在执行的程序:操作系统提出进程概念目的:是为了跟踪程序在执行期间的状态.而程序只是一段代码,是一个静态的概念 无法准确描述程序执行时候发生的一切.程序代码被加载进内存后就以进 ...

  7. 系统运行缓慢,CPU 100%,以及Full GC次数过多问题的排查思路

    前言 处理过线上问题的同学基本上都会遇到系统突然运行缓慢,CPU 100%,以及Full GC次数过多的问题.当然,这些问题的最终导致的直观现象就是系统运行缓慢,并且有大量的报警. 本文主要针对系统运 ...

  8. 4.计算机启动过程的简单介绍 计算机启动流程 计算机BIOS作用 POST 开机自检 计算机启动顺序 分区表 操作系统启动

    计算机的启动

  9. 一次线上redis实例cpu占用率过高问题优化(转)

    前情提要: 最近接了大数据项目的postgresql运维,刚接过来他们的报表系统就出现高峰期访问不了的问题,报表涉及实时数据和离线数据,离线读pg,实时读redis.然后自然而然就把redis也挪到我 ...

随机推荐

  1. 使用 wget 下载需要 cookie 认证的网站

    .使用火狐,安装 Export Cookies 插件 2.登录网站,点菜单"工具-Export Cookies..",保存 cookies.txt 到自己的文件夹 3.把 cookies.t ...

  2. php代码审计8审计文件上传漏洞

    文件上传漏洞是指用户上传了一个可执行的脚步文件,并通过此脚本文件获得了执行服务器端命令的能力,这种攻击方式是最直接和有效的,文件上传本身是没问题的,有问题的是文件上传后,服务器怎么处理,解释文件,通过 ...

  3. Web渗透测试(xss漏洞)

    Xss介绍—— XSS (cross-site script) 跨站脚本自1996年诞生以来,一直被OWASP(open web application security project) 评为十大安 ...

  4. Mysql的用户基本操作

    创建用户: mysql> create user 'cai'@'localhost' identified by '123456'; Query OK, 0 rows affected (0.0 ...

  5. jeecms学习笔记

    jeecms学习笔记 内容管理系统 1.栏目列表标签 作用:获取栏目的列表 [@cms_channel_list] [#list tag_list as b] <a href="${b ...

  6. 神奇的Form表单

    今天坐标单上传,提交的按钮使用了<button>,发现不论怎么写ajax和设置form表单,都会刷新页面,百思不得解,然后偶然间把<button>变成<input typ ...

  7. gitlab忘记管理员密码

    gitlab忘记密码后破解! gitlab-rails console production :> user = User.).first irb(main)::> user.passwo ...

  8. flask_restful

    from flask_restful import (Resource, reqparse) # 参数解析对象生成 parser = reqparse.RequestParser() parser.a ...

  9. yyy的python3第八天学习

    望着小月亮:https://www.cnblogs.com/triple-y/ 请尊重原创:https://www.cnblogs.com/triple-y/p/9655753.html python ...

  10. LeetCode记录之28——Implement strStr()

    Implement strStr(). Returns the index of the first occurrence of needle in haystack, or -1 if needle ...