论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
软件与程序人生
›
云原生
›
[Linux] 通透解说 什么是进程
[Linux] 通透解说 什么是进程
宝塔山
论坛元老
|
2024-9-23 08:29:38
|
显示全部楼层
|
阅读模式
楼主
主题
1025
|
帖子
1025
|
积分
3075
标题:[Linux] 通透解说 什么是进程
个人主页:@水墨不写bug
(图片来自网络)
目录
一.深入进程基本概念
二.管理好进程
1.管理好进程的方法
2.形貌进程-PCB
3.组织进程
正文开始:
本文按照对进程的
先形貌再组织
举行解说 。
一.深入进程基本概念
课本概念:程序的一个执行实例,正在执行的程序等。
内核观点:担当分配系统资源(CPU时间,内存)的实体。
由于进程的概念非常紧张,所以我们在这里再次解说一遍:
当我们写好一个程序的时间,编译源代码会产生对应的可执行程序,当我们./运行这个程序1的时间,操作系统会做两件事:
1)将可执行程序加载到内存:
但是只管内存中已经加载了可执行程序,但是此时操作系统还无法管理这些程序,因为内存中没有形貌相关属性的数据结构。所以在操作系统中,为了形貌加载到内存中的程序的相关属性,所以衍生出一个概念PCB。(
Linux中称为task_struct
)Linux操作系统使用C语言写的,本质上task_struct就是一个结构体。每一个
task_struct内部都存储有对应进程的属性信息。
2)将代码和数据加载到PCB(task_struct)中:
如许的操作最终我们达成了一个目的:
将操作系统对进程的管理工作转化为了对特定命据结构的管理。
二.管理好进程
1.管理好进程的方法
想要管理好进程,起首必要形貌好进程 ,对进程的管理仍旧满意我们之前得出的结论:
先形貌,再组织。
2.形貌进程-PCB
进程信息被放在一个叫做进程控制块的数据结构中,可以理解为
进程属性的集合
。课本上称之为PCB(process control block), Linux操作系统下的PCB是:
task_struct(也就是上图的组织进程的链表的节点)
task_struct-PCB的一种
在Linux中形貌进程的结构体叫做
task_struct
。
task_struct是Linux内核的一种数据结构,它会被装载到
RAM(内存)
里并且包含着进程的信息。
(看一眼task_struct,不必要刨根问底)
// task_struct结构注释:
// ==========================
long state //任务的运行状态(-1 不可运行,0 可运行(就绪),>0 已停止)。
long counter //任务运行时间计数(递减)(滴答数),运行时间片。
long priority //运行优先数。任务开始运行时counter = priority,越大运行越长。
long signal //信号。是位图,每个比特位代表一种信号,信号值=位偏移值+1。
struct sigaction sigaction[32] //信号执行属性结构,对应信号将要执行的操作和标志信息。
long blocked //进程信号屏蔽码(对应信号位图)。
// --------------------------
int exit_code //任务执行停止的退出码,其父进程会取。
unsigned long start_code //代码段地址。
unsigned long end_code //代码长度(字节数)。
unsigned long end_data //代码长度 + 数据长度(字节数)。
unsigned long brk //总长度(字节数)。
unsigned long start_stack //堆栈段地址。
long pid //进程标识号(进程号)。
long father //父进程号。
long pgrp //父进程组号。
long session //会话号。
long leader //会话首领。
unsigned short uid //用户标识号(用户id)。
unsigned short euid //有效用户id。
unsigned short suid //保存的用户id。
unsigned short gid //组标识号(组id)。
unsigned short egid //有效组id。
unsigned short sgid //保存的组id。
long alarm //报警定时值(滴答数)。
long utime //用户态运行时间(滴答数)。
long stime //系统态运行时间(滴答数)。
long cutime //子进程用户态运行时间。
long cstime //子进程系统态运行时间。
long start_time //进程开始运行时刻。
unsigned short used_math //标志:是否使用了协处理器。
// --------------------------
int tty //进程使用tty 的子设备号。-1 表示没有使用。
unsigned short umask //文件创建属性屏蔽位。
struct m_inode * pwd //当前工作目录i 节点结构。
struct m_inode * root //根目录i 节点结构。
struct m_inode * executable //执行文件i 节点结构。
unsigned long close_on_exec //执行时关闭文件句柄位图标志。(参见include/fcntl.h)
struct file * filp[NR_OPEN] //进程使用的文件表结构。
// --------------------------
struct desc_struct ldt[3] //本任务的局部表描述符。0-空,1-代码段cs,2-数据和堆栈段ds&ss。
复制代码
task_ struct内容(内部变量)分类:
标示符:
形貌本进程的唯一标示符,用来区别其他进程。
状态:
任务状态,退出代码,退出信号等。
优先级:
相对于其他进程的优先级。
程序计数器:
程序中即将被执行的下一条指令的地点。
内存指针:
包罗程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。I/ O状态信息: 包罗显示的I/O哀求,分配给进程的I/ O设备和被进程使用的文件列表。记账信息: 大概包罗处理器时间总和,使用的时钟数总和,时间限制,记账号等其他信息。
3.组织进程
可以在内核源代码里找到它。全部运行在系统里的进程都以task_struct链表的形式存在内核里。(
下面作图的例子是以链表的形式组织进程为例
)
完~
未经作者同意禁止转载
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
宝塔山
论坛元老
这个人很懒什么都没写!
楼主热帖
Sqlserver2012卸载
Maxwell 一款简单易上手的实时抓取Mysq ...
分布式事务 | 使用DTM 的Saga 模式 ...
哈工大信息安全概论期末复习 ...
WebLogic JNDI注入(CVE-2021-2109) ...
HTTPS基础原理和配置-3
轻量级CI/CD发布部署环境搭建及使用_03 ...
数字IC-1.9 吃透通信协议中状态机的代 ...
[DuckDB] 多核算子并行的源码解析 ...
.NET服务治理之限流中间件-FireflySoft ...
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
前端开发
DevOps与敏捷开发
移动端开发
分布式数据库
SQL-Server
MES
Oracle
快速回复
返回顶部
返回列表