计算机结构
冯.诺依曼结构处理器特点
- 计算机处理的数据和指令一律用二进制数表示
- 顺序执行程序。计算机运行程序过程中,把要执行的程序和处理的数据首先存入主存储器(内存),计算机执行程序时,将自动地并按顺序从主存储器中取出指令一条一条地执行。
- 计算机硬件由运算器、控制器、存储器、输入设备和输出设备五大部分组成
cpu结构
控制单元
整个CPU的控制指挥中心,由程序计数器PC(Program Counter)、指令寄存器IR(Instruction Register)、指令译码器ID(Instruction Decoder)和操作控制器OC(Operation Controller)等组成。它根据用户预先编号的程序,依次从存储器中取出各种指令,放在指令寄存器IR中,通过指令译码分析确定应该进行什么操作,然后通过操作控制器OC,按确定的时序,向相应的部件发出微操作控制信号。
运算单元
可以执行算术运算(加减乘法等基本运算及其附加运算)和逻辑运算(位移、逻辑测试或值比较)。全部操作都是由控制单元发出的控制信号来执行的。
存储单元
CPU片内缓存和寄存器组,是CPU中暂时存放数据的地方,里面保存着等待处理的数据或已经处理过的数据。CPU访问寄存器所用的时间比要访问内存的时间快100倍。
Linux操作系统
虚拟地址空间
虚拟地址
在linux的内存管理中,用户使用0-3GB的地址空间,而内核仅仅用了1GB的地址空间
进程地址分布
linux采用虚拟内存管理技术,每个进程都有一个3G大小的独立的进程地址空间,这个地址空间就是用户空间。每个进程的用户空间都是完全独立、互不相干的。进程访问内核空间的方式:系统调用和中断。
创建进程等进程相关操作都需要分配内存给进程,这时进程申请和获得的不是物理地址,仅仅是虚拟地址。
内核态&用户态
一般的操作系统对执行权限进行分级,分别为用户态和内核态。用户态相较于内核态有较低的执行权限,很多操作是不被操作系统允许的,原因简单来说就是用户态出现问题(自己写的BUG),也不能让操作系统崩溃。
内核态:相当于一个介于硬件与应用之间的层,内核有ring 0的权限,可以执行任何cpu指令,也可以引用任何内存地址,包括外围设备,例如硬盘,网卡。权限等级最高
用户态:权限有限,例如内存分配中,有一部分内存是仅为内核态使用的,用户态code则不允许访问那些内存地址。每个进程只允许访问自己申请到的内存。不允许访问外围设备。另外在执行cpu指令的时候也可以被高优先级抢占。
大多数时间各类程序都是执行在用户态下
状态转化
用户程序跑在用户态下,但是如果需要执行一些操作,例如申请内存、网络读写时,自己的权限不够,就需要转换到内核态去让内核的code帮忙处理。
- 系统调用
这是用户态进程主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作。
- 异常
当CPU在执行运行在用户态下的程序时,发生了某些事先不可知的异常,这时会触发由当前运行进程切换到处理此异常的内核相关程序中,也就是转到内核态,比如缺页异常。
- 外围设备中断
当外围设备完成用户请求的操作后,会向CPU发出相应的中断信号,这时CPU会暂时执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序。如果先前执行的指令是用户态下的程序,那么这个转换的过程自然也就发生了有用户态到内核态的切换。比如硬盘读写操作完成,系统会切换到硬盘读写的中断处理程序中执行后续操作等。
linux下每个进程的栈有两个,一个是用户态栈,一个是内核态栈。在需要从用户态栈切换到内核态的时候,需要进行执行栈的转换,保存用户态的状态,包括寄存器状态,然后执行内核态操作,操作完成后要恢复现场,切换到用户态,这个过程比较耗时。mutex加锁解锁慢就是因为需要从用户态切换到内核态。
中央处理器CPU
CPU(Central Processing Unit)是计算机内部的一个电子电路。根据一些具体的指令它可以执行基本的运算、逻辑、控制和IO操作。
主要组成
- 算术逻辑单元(Arithmetic Logic Unit):主要执行一些算术&逻辑操作
- 处理器寄存器(Processor Registers):给ALU提供操作数并存储ALU操作的结果
- 控制器(Control Unit):通过协调ALU、寄存器和其他组件之间的操作,从主存中取得并执行相应的指令
网友评论