操作系统-课堂笔记-进程概述(南航)

进程概述

1.引言

首先引入问题,进程是怎么产生的,为什么需要进程?

  1. 我们先回到古老的裸机编程时代,即没有操作系统的时代,我们写的代码(汇编)直接跑在硬件之上。
  2. 裸机编程自由度很大,即内存可以供我们随意使用
  3. 自由使用内存带来一个问题:CPU可能会混淆数据与指令,如果产生混淆会产生无法预料的结果
  4. 自由使用内存带来的另外一个问题:我们的程序可以修改自身,比如修改内存中某一位置的数据,那么可能就将自身代码改变了。
  5. 事实上,Linux内核引导程序部分频繁涉及了修改自身代码。

引入了以上问题以后,我们开始学习进程,进程可以帮助我们解决上述问题。学习过程中注意体会进程是如何帮我们解决上述问题的。

2.进程的概念

  1. 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,也可以理解成其是对内存的抽象。
  2. 我们从其定义可以看出,其存在的目的是为了管理资源。想想我们引言中提出的问题,上述问题是不是和资源管理有关联?
  3. 那么我们再思考一个问题,所谓分配资源是分配的哪里的资源?再看看引言中的问题,上述问题是因为内存访问引起的,所以进程涉及的资源分配和管理大多都是针对内存的。
  4. 那么有了进程的概念以后,内存是怎么管理的呢?带着这个问题继续看。

2.1进程的内存抽象

先看一个比较熟悉的结构:
在这里插入图片描述

  • 所谓进程为内存提供了一层抽象,其实就是上述结构,将内存严格划分成各个段。
  • 想想划分成各个段以后,怎么解决我们引言中提到的CPU混淆数据和指令的问题?
  • 根据之前的基础应该能将一些知识串起来:CPU执行的时候在代码段取指令,划分了数据段和代码段CPU就不会混淆数据和指令了,然后再分别对各个段做限制,比如限定代码段是只读的,那么程序就不能修改自身代码了。

各个段的含义:

  • 代码段text:存放代码(指令)
  • 数据段data:存放全局变量,静态变量
  • 堆heap:new,malloc时从堆中申请空间
  • 栈stack:存放局部变量,子函数返回地址

课外充电站

Linux0.11

  • 13
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值