写在前面
我们这次先从进程往后说,后续讲的过程中我们还会串入竞争、独立、并发和并行的概念,还会涉及到进程调度和切换的理解。
因为这是为了管理进程而描述进程所设计的结构体类型,将来当有一个进程加载到内存时,
操作系统在内核中一定要为该进程创建 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 内存管理,通过地址空间进行功能模块的解耦。
让进程或者程序可以以一种统一的视角看待内存!
有了虚拟地址空间,还可以让进程或者程序可以 以统一的视角看待内存。方便以统一的方式来编译和加载所有的可执行程序。如此一来,就可以简化进程本身的设计和实现。
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/bcyy/33125.html