<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg> <h4>写在前面</h4>
讯享网
我们这次先从进程往后说,后续讲的过程中我们还会串入竞争、独立、并发和并行的概念,还会涉及到进程调度和切换的理解。
因为这是为了管理进程而描述进程所设计的结构体类型,将来当有一个进程加载到内存时,
操作系统在内核中一定要为该进程创建 task_struct 结构体变量,
并且要将该变量链入到全局的链表当中。要删掉一个进程,实际上就是遍历所有的链表结点,
把对应进程的 和代码都释放掉,这就叫对链表做管理。
最终你会发现,操作系统对进程的管理,最终变成了对链表的增删查改。
操作系统不相信任何人的,不会直接暴露自己的任何数据结构,代码逻辑,其他数据相关的细节。
想做系统是通过 系统调用 的方式,对外提供接口服务的。
Linux 操作系统是用C语言写的,这里所谓的 “接口”,本质就是C函数。
我们学习系统编程,本质上就是学习这里的系统接口。

进程状态在 Linux 内核中就是个 整数,这个整数在进程的 task_stuct 中: int status。
学过操作系统这门课的应该都知道,一个进程通常有三种状态:就绪、运行、阻塞。
进程的状态,想仔细了解可以搜一搜其他博客。
Linux 中的进程优先级由两部分组成:PRI+ NI
PRI:优先级 (priority),默认进程优先级为 80。
NI:nice 值 (nice value) ,进程优先级的修正属性,取值区间为 [-20, 19] ,默认值为 0 。
另外优先级是可以修改的。
我们要先清楚他的结构
内核空间(1GB)+环境变量区域+栈+共享区+堆+未初始化的数据+初始化的数据+正文代码。
注意:static被当作全局变量。
要知道虚拟地址的存在。
有了虚拟地址空间,就是给访问内存添加了一层软硬关键层,可以对转化过程进行审核,非法的访问就可以被直接拦截了,可以 保护内存。
还能够将 进程管理 和 Linux 内存管理,通过地址空间进行功能模块的解耦。
让进程或者程序可以以一种统一的视角看待内存!
有了虚拟地址空间,还可以让进程或者程序可以 以统一的视角看待内存。方便以统一的方式来编译和加载所有的可执行程序。如此一来,就可以简化进程本身的设计和实现。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/144110.html