【计算机的工作机制】

本篇文章分为两部分,第一部分简单介绍CPU的工作原理,第二部分介绍操作系统中进程的基本概念和工作机制,学习进程,有助于我们线程的学习~

一.硬件设备

谈到计算机的组成,不得不提到一个人,他就是被称为“现代计算机之父”的冯诺依曼。现在的计算机,大多遵守他设想出来的冯诺依曼体系结构

也就是计算机由五大部件组成,它们分别是

  • 中央处理器CPU (包括了控制器和运算器)
  • 存储器 (分为外存和内存)
  • 输入设备
  • 输出设备

  事实上,除了CPU,其他三个对于我们来说已经是非常熟悉了,即使是非专业的人,也知道硬盘、光盘、磁盘这些存储器,输入设备有打字需要的键盘,输出设备有获取声音需要的音响,而最神秘的莫过于CPU了,它也是计算机最最最核心的部件,而了解它的组成、工作原理也成为我们理解计算机如何编译程序的关键之一。


1.CPU的工作原理

第一点要必须要知道的是,CPU的两个重要的单元,ALU和CU

  • ALU 算术逻辑单元

从名称也可以猜测的到,这个单元是负责进行算术运算和逻辑运算的。

  • CU 控制单元

它负责程序的流程管理,由指令寄存器、指令译码器、操作控制器三个部件组成

其中重点要理解的就是寄存器,为什么CPU当中要有寄存器呢?

它们作用之一就是是用来保存关键变量和临时结果的,因为CPU访问内存获取执行数据要比执行指令花费的时间要长,这种寄存器称为通用寄存器。

除此之外,还有一些特殊的寄存器,比如程序计数器,它可以指示下一条指令的地址,再比如IP寄存器,指向代码段中下一条指令的位置。CPU会根据该寄存器将代码段加载到指令队列中,然后交给ALU运算单元去执行。

CPU的工作原理: 

简单的来说就是,程序指令,经过控制单元的调度分配,被送往算术逻辑单元,被处理过的指令被存储在存储单元,最后交由应用程序使用。


二.操作系统 OS

操作系统是用来管理计算机资源的软件,它向下管理各种不同的硬件,向上又可以分配管理各种应用程序。

目前常见的操作系统有:windows系列、Unix系列、Linux系列、Android系列、IOS系列等等。


1.进程

或许有人分不清程序和进程:

程序:可执行文件,占用了硬盘空间

进程:运行起来的,可以完成一系列工作,会消耗cpu资源、内存资源、硬盘、网络带宽

我们打开电脑的任务管理器,看到的这些就是 进程 。


2.PCB进程管理块

一台运行的计算机中,是包含了很多进程的,这么多的进程,就需要 管理 。

我们把这个管理分为 描述 和 组织。

1)描述:PCB进程控制块

计算机会使用一个专门的结构体,来记录一个进程里面的各个属性

a.pid进程的标识

        同一个系统,同一时刻,每个进程都有唯一的pid

b.内存指针

        表示了该进程对应的内存资源时怎样的(主要存储的是从exe可执行文件加载过来的

指令和数据)

指令,就像一个剧本;

进程,就像一个演员;

c.文件描述符表

用该表记录进程正在使用的文件

操作系统无法直接操作硬件硬盘,而是操作存储在硬盘上的文件

2)组织:

使用一系列的数据结构(一般是双向链表),有效组织多个进程,方便遍历、查找


3.进程和CPU

CPU,就像一个舞台;

进程,就像一个剧组;

但是这么多的进程,CPU只有一个,这咋办?轮着用。

CPU虽然只有一个,但是舞台不止一个,现在的CPU都是多核心的CPU,这也意味着CPU拥有了多个舞台;

不像以前的CPU上只有一个舞台,同一时刻只允许一个剧组在上面拍戏;

比如这台电脑,有6个物理核心,12个逻辑核心,也就是有12个舞台。

尽管数量比从前多了,但还是不够。

这就需要我们合理的调度这些舞台,一般有两种方式。

1)并行:同一时刻,两个进程,同时运行在两个CPU逻辑核心上

2)并发:两个进程,在同一个舞台上,轮着上

但是,由于系统切换进程的速度太快,我们无法感知是哪种方式调度,并且这两种方法,宏观上体感效果是一样的,通常会用“并发”代指“并行+并发”。


4.PCB中关于进程调度的属性

1)状态

实际上,进程在系统中状态有很多,其中最关键的就是 就绪 和 阻塞 状态。

2)优先级

系统在给进程进程调度时,会根据优先级的不同,来决定分配的权衡,就可以把系统资源调配给更重要的进程。

3)上下文

由于进程会轮着上的,对于一次性运行不完的,就需要cpu记住上次运行的位置,继续往后运行,

就像是存档,读档。

4)记账信息

统计每个进程在cpu上都执行了多久,执行了多少指令

如果发现某个进程时间太少,那么接下来就会给它多排一点时间。


5.虚拟地址和物理地址

每个进程,都需要一定的内存资源。

早期的操作系统,就是直接把物理内存分配给进程,这就带来了一个严重的问题:

一旦某个进程内部代码写出了bug,比如内存越界访问,就可能影响到其他的进程。

后来,操作系统引进了 虚拟地址空间 有效的解决了这个问题。

虚拟地址,并不是物理内存上的真实存在的的地址,而只是在该进程中存在,不同的进程中,可以存在相同的虚拟地址,但是实际上对应的是不同的物理地址。

通过虚拟地址,进程有了独立性,把进程隔开了,每个进程有自己的虚拟地址空间,

一个进程无法直接访问或者修改其他进程虚拟地址空间的内容,强化了系统的稳定性。

但是,多个进程也有通信的方法:借助一个公共区域(硬盘、网卡)完成数据的交换。


限于笔者才疏学浅,只是笔者的学习笔记,如有错误,请指正~~

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值