1.计算机体系结构
.c文件经过计算机的编程和链接,转化成二进制/可执行文件 (.exe)
存储在磁盘中,通过客户双击文件打开进程,然后加载到内存中存储。
以32位为例,系统会分配4GB的内存空间。将指令和数据存储于虚拟内存中。
2.程序虚拟地址空间
先来了解一些概念和原理。
OS:负责虚拟内存和物理内存之间的转换
PC寄存器:存放程序执行的下一条指令。
程序运行的局部性原理
- 运行当前指令,会执行当前指令的下一条指令。
- 程序加载当前的数据,往往会加载相邻的数据。
CPU中的PC寄存器读取虚拟内存上的指令和数据,然后执行程序的下一条指令。
内存与CPU之间会存在三条总线:
- 控制总线:用于读取内存和写入内存
- 地址总线:用于存储指令和数据的内存地址。
- 数据总线:用于数据的传输
内存中的运行就是进程。用它去访问文件会比正常的读写磁盘更快(大约快上数百倍)。
Ok,现在我们来看一下4GB的内存中都会存储些什么(从低地址到高地址)。
| 预留空间:这里优化内存的使用,无法被访问,保留。 | 3GB用户空间 |
|
.text代码段 | |
| .data数据段:初始化不为0的数据。 | |
|
.bss 数据段:初始化为0和未初始化的数据。 开始时操作系统给.bss数据置0. | |
| 堆内存:手动申请,从低地址到高地址申请 malloc/new | |
| 栈内存:自动申请,从高地址到低地址申请 | |
| 进程的内核 | 1GB内核空间 |
区分指令和数据
在CPU的判断中
指令:PC指向的内存地址中的内容,CPU解码执行。
数据:被指令操作的对象。指令执行时,会从内存或寄存器中读取数据,进行运算后再写回。
3.进程
进程作为运行中的程序,是Linux执行的基本单元,资源分配和调度的基石。
看一下进程和程序的区别
进程:程序被加载到内存中执行的动态实例,包含了代码,数据和所有的运行状态。
程序:磁盘上的静态指令集合。
CPU作为执行者,单核CPU同一时刻运行一个进程,多核CPU同一时刻运行多个进程。
OK,继续看进程的内容:
包含了独立的内存空间和操作系统内核中进程控制块。
独立的内存空间中包含代码(.test),数据(.bss),堆(heap),栈(stack)。
进程的作用:实现并发执行,资源隔离,系统资源的有效管理。
资源分配:是操作系统的核心功能之一,指其将计算机的硬件资源(如 CPU、内存、硬盘、外设等),根据程序(进程)的需求和预设规则(公平性、高效性等),合理分配给各个运行中程序,以确保程序能正常执行且资源不被浪费的过程。
多任务管理:同样是操作系统的关键功能,指其通过 “时间分片” 等技术,将 CPU 运行时间切分为微小片段并轮流分配给多个程序,快速切换不同程序的运行状态,让用户主观感受上多个程序在同时执行的管理方式。
进程的五大特征:
- 动态性:进程是动态实例,是程序的动态执行。
- 并发性:多个进程同时进行。
- 独立性:进程是操作系统进行资源分配和调度的基本单位。(进程的内核空间可以共享)
- 异步性:进程以不可预知的速度向前推进
- 结构性:进程具有明确的结构,通常由进程控制块(PCB)、程序段、数据段三部分组成:
- 进程控制块(PCB):是进程存在的唯一标志,存储进程的核心信息,操作系统通过 PCB 管理和控制进程
- 程序段:存放进程执行的指令集合
- 数据段:存放进程执行过程中使用和产生的数据
PCB(进程控制块)
是进程存在的唯一标志,存储进程的核心信息,操作系统管理和控制进程的专门数据结构。
包含进程的核心信息:
唯一的进程,ID,父ID
处理器的状态信息:切换时保存的计数器,CPU寄存器。
(PC/IP都有储存下一条要执行指令的内存地址)
进程调度信息
进程控制信息
在VMware中,用以下命令行进行查看
ls /proc
cat /proc/1/status
进程的五大状态
创建态 就绪态 运行态 阻塞态 终止态
创建态——>就绪态:加载完成
就绪态——>运行态:被CPU调用
运行态——>阻塞态:等待新事物的发生
运行态——>就绪态:时间片用完
阻塞态——>就绪态:事件发生
运行态——>终止态:程序正常结束或异常终止
终止态——>结束:父进程读取状态
以上便是我对于计算机体系结构&程序虚拟地址空间&进程的见解,欢迎大佬点评和修改。

133

被折叠的 条评论
为什么被折叠?



