linux系统编程学习day1--MMU和PCB的理解

MMU和PCB的理解

因为之前接触过一部分关于嵌入式系统的东西,大致了解一些mmu具体的工作原理及其虚拟和物理地址的概念,通俗易懂而言的话,mmu就是给你的物理地址一个别名,这个别名才是你在程序中调用的地址。下图是从讲解视频中获取的一个CPU和程序执行的示意图。

对于一个在32位平台中运行的程序而言,有4G的k虚拟地址空间,其中0-3G是用户空间,剩余空间为内核空间这部分空间是不允许程序直接访问的,MMU就是把你使用的这些空间进行一个内存映射,虚拟内存映射到物理内存,我的理解是为了更合理的分配有限的物理内存空间,然后进行这样的一个设置,将需要的空间再在内存中进行开辟出来一个,然后对应的地址通过MMU转化之后交给程序进行使用。


PCB这个对我是一个全新的概念,第一次听说这个词还是在PCB板子上听过,每一个进程都有一个对应的PCB就是进程控制块,也称为进程描述符,它的本质是一个tast_struct的结构体,这个结构体的成员陈列在下图:

每个成员的各自含义在图中叙述得很清楚了。



认识了PCB后就可以接触到程序和进程的概念了,程序就是一个编译好了的一个文件,就仅仅是一个文件,只是占用的是你硬盘的存储空间,而进程却占用很多系统资源,比如CPU、内存等,我学习的过程中听到一个比喻我感觉特别形象,程序就是一个剧本,仅仅只是一张纸而已,而一个工作的进程就是一个正在上演的戏剧,它就是按照你所设定的剧本在运行,需要用到舞台、演员等等资源。


然后引申出两种程序的设计模型,一种是单道程序设计模型——CPU只能顺序的处理完一个个计划任务,就和队列一样;多道程序设计模型——就是能够并行去处理多个计划任务。关于是如何实现并行运行的,我的理解很简单,就是让一个任务工作一会儿然后暂停下,然后工作另一个任务,然后再暂停会,然后依次进行两个任务切换运行,由于处理速度很快,人们就会感觉是在同时处理两个任务。(这种多任务模式我记得我在STM32上的UCOS上也看过介绍,我记得也是这个意思,让一个任务挂起然后去处理另一个然后再回来处理这个)


通过并行处理就可以发现一个进程的状态不单单只有运行一种,应该有五种状态,如下图:

箭头表示状态的切换方向,很直观的可以看出各个状态之间应该怎么切换,初始态未在图上列出。


最后还了解了环境变量的定义,其实环境变量在很早之前就有过接触,通过配置windows里的我的电脑里面的设置来设定的,当时是为了玩什么游戏吧应该,Linux下常用的环境变量有PATH、SHELL、HOME、LANG、TERM,同时Linux还提供了几个环境变量的操作函数

char *getenv(const char *name);获取一个环境变量的值

int setenv(const char *name, const char *value, int overwrite);设置环境变量

还有其他函数,具体使用方法可以在man文档中得到详细的了解,这里就不一一重复了


第一天接触Linux的系统编程,概念较多,大多都是听过但是没有很系统的去了解,有点似是而非。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值