系统编程
一,计算机的基本组成原理:
冯诺伊曼体系:控制器,运算器,存储器,输入设备,输出设备
其中控制器和运算器组成CPU,存储器即内存,输入输出设备即I/O设备。CPU通过总线来控制内存和I/O设备
运算器:对数据进行常规计算。
控制器:控制计算机各部分进行协调的工作
存储器:存储数据和程序
输入设备:把人类的资料转换成二进制存储起来
输出设备:把二进制转换成人类能识别的进行呈现
系统总线:数据总线,地址总线和控制总线(片内总线和通信总线)
数据总线w输数据
地址总线:给数据总线上的源数据或者目的数据指出地址
控制总线:各部分在无时无刻共享上面两个总线,控制总线控制什么时候由谁使用
进程:执行中的程序(只要把程序从磁盘上加载到内存上,系统就会把它当一个进程)
进程分两部分:
1.PCB--》进程控制块:记录进程属性信息
2.4G的虚拟地址空间映射到物理内存上的数据
系统管理所有的进程的PCB是通过双向循环列表
进程状态
阻塞:等待事件发生
执行:此处的执行单指CPU正在执行进程中的指令
时间片轮转法:就算进程差一步退出,只要时间片完了,直接进入就绪状态。
并行依赖于硬件,取决于CPU是几核处理器
内存管理方案:分区,分页(大小相等和大小不等),分段
加载过程:操作系统将用户空间的内存划分为大小相等的区块标号,磁盘上的文件也被分为大小相等的标号,操作系统为每个进程维护一个页表,按页管理,这个页表就记录了程序加载到内存时页号对应的物理帧号。其中LINUX中,ELF格式的可执行文件中Program Headers记录了哪些数据需要被加载到一块的。
实地址模式:没有操作系统,都是硬件集成的固定的寻址方式。(计算机在加电使用时,操作系统还没有加载,没有内存管理的时候)
CPU里的寄存器(16位):DS CS SS(物理内存上程序段的起始位置) IP(偏移值)
地址总线 20位
为了保护地址:规定每个段大小都必须是16的倍数,所以段大小的取值范围为16~2^16=64K
映射方式:DS(数据段)<<4 +IP===>物理地址(通过恶意修改,加出数据段,会加到别的段)
内存最大范围 1M
保护地址模式:
GDTR-->全局段描述符表寄存器
LDTR-->局部段描述符表寄存器
指向段描述符表的起始地址(内存的地址)
表在内存相当于数组,内存被分为每个8字节
DS CS SS寄存器都是16位,前13位即段选择子(全局段描述符表的中的下标,即数组的下标),其后两位为权限(内核00/用户11),最后一位为GDTR/LDTR
保护地址模式扩充了一个寄存器IPE(32位):记录在段中的偏移值
保护模式下分段的地址映射:
GDTR[DS>>3](右边三位去掉,右边三位不是选择子).BaseAddr(段起始地址) +IPE(IPE的值只能取决于段的大小)
映射得到的为线性地址【CRO寄存器的PG位记录了是否开启分页机制】
--》未开启分页--》物理地址
--》启用分页机制后--》虚拟地址(32位数组),32位数组分为10,10,12、
CR3寄存器保存页目录的起始地址--》页目录--》{12位控制位(P位页面在物理内存上还是交通平行上,M位是否是脏页即被修改的)--》20位页号(32位系统能够真实映射到的物理内存位4G--》分页每个为4K,故有2^20个页,故页号位20)}
--》页表--》12位控制位--》20位页号(物理内存)
--》12为页里面的偏移值--》2^12=4K--》进程数据
分页的优缺点:
1.分页安全,访问速度快
2.需要多分两个页,页目录和页表,其中只有一点有用,得维护整个页,但是进程数据不止一个页,故这点浪费还是负担得起的。
本文地址:https://blog.csdn.net/m0_43407388/article/details/107433132