【Linux】linux进程--进程概念第四部分_进程虚拟地址空间

1、虚拟地址

我们在学习C/C++的时候所看到的地址全部都是虚拟地址!物理地址用户一般看不到,由操作系统统一管理,操作系统负责将程序中的虚拟地址转化为物理。

2、进程虚拟地址空间

操作系统为每一个进程虚拟出来一个4G的虚拟地址空间(32位操作系统),程序在访问内存的时候,使用的是虚拟地址进行访问;

既然是操作系统虚拟出来的地址,所以不能直接存储数据,存储数据还是在真实的物理内存当中;

所以操作系统需要将虚拟地址转化为物理地址进行访问(页表映射)。

扩展:为什么操作系统需要给每一个进程都虚拟出来一个进程地址空间?为什么不直接使用访问物理内存,这样不是更加快一点。

原因:

——各个进程访问同一个物理地址的话,会造成不可控。在有限的内存空间内,进程是不清楚哪一个内存被其他进程使用,哪些内存是空闲的。所以这种场景之下冒昧的使用物理地址,一定会导致多个进程访问物理内存的时候出现混乱。

——内存又由操作系统统一管理,但是又不能采用预先分配内存的方式,毕竟操作系统也不清楚进程能使用多少内存,使用多久。所以虚拟给每一个进程分配了4G的地址(虚拟地址)。

——进程真正要保存数据,或者申请内存的时候,操作虚拟地址,让操作系统给进程进行分派,比较合理(同时也会节省很多空间)。

——每一个进程都无感的使用拿到的虚拟地址,背后就是操作系统进行了转换(页表映射)。

为什么32位操作系统给进程分配的是4G的虚拟地址空间?

——32位操作系统一共有32根地址线,每个地址线能模拟的数字位0/1,最小就是0x00000000,最大就是0xFFFFFFFF。(64位同理)

3、页表

页表与虚拟地址空物理内存之间的关系:

页表实现的功能:映射

操作系统可以通过虚拟地址+页表的方式找到具体的物理地址

虚拟地址=页号+页内偏移。

页号=虚拟地址/页的大小

页内偏移=虚拟地址%页的大小

扩展:

分段式:虚拟地址=段号+段内偏移

              段表          段号:段的起始地址

段页式:虚拟地址=段号+页号+页内偏移

              段表          段号:页表的起始位置

              页表          页号:块号

4、进程优先级问题

-PRI,即进程的优先级,或者通俗点说就是程序被CPU执行的先后顺序,PRI值越小,进程优先级越高;

-NI,nice值,其表示进程可被执行的优先级的修正数值;

-nice值为负值的时候,该程序将会把PRI变小,即优先级变高,会更快被执行;

-调整进程优先级在Linux下,就是调整nice值;

-nice其取值范围是-20 - 19,一共四十个级别。

使用top命令更改已存在进程的nice(root用户可以修改)

输入top命令->进入top后按‘r'->输入进程PID->输入nice值。

进程概念章节至此结束...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值