深入理解操作系统--进程(1)

news2024/11/14 6:20:39

文章目录

  • 概述
    • 进程,轻量级进程和线程
    • 进程描述符
    • linux进程四要素
    • 创建进程
      • linux3个系统调用创建新的进程
      • do_fork函数
      • copy_process函数
    • 撤销进程
  • 小结

概述

这一章,主要讲的是进程的概念,即程序执行的一个实例。在linux源代码中,通常把进程称为任务。

然后写了这一章的重点,先讨论进程的静态特性,然后描述内核如何进行进程切换;最后两节研究如何创建和撤销进程。

进程,轻量级进程和线程

写点这一节有趣的事情,如下:
进程有生命周期,被产生,可以产生一个或多个子进程,最终都要灭亡。每个进程只有一个父亲。
从内核观点看,进程的目的就是担当分配系统资源(CPU时间,内存等)的实体。
一个进程由几个用户线程组成,每个线程都代表进程的一个执行流。
从内核观点看,多线程应用程序仅仅是一个普通的进程。多线程应用程序多个执行流的创建,处理,调度整个都是在用户态进行的。

进程描述符

内核管理进程,必须对每个进程所做的事情进行清楚的描述。使用进程描述符来对进程的一些内容进行管理。
进程描述符都是task_struct类结构,如下:
task_struct
书里边的图
对于一个进程来说,要了解进程的状态,比如:
可运行状态,可中断的等待状态,不可中断的等待状态,暂停状态,跟踪状态,僵死状态,僵死撤销状态这几种状态,代码如下:
进程状态

linux进程四要素

  • 有一段程序供其执行;
  • 有进程专用的系统堆栈空间;
  • 在内核有task_struct数据结构;
  • 都独立的存储空间,拥有专有的用户空间。

如果只有前三条,则称为“线程”。如果完全没有用户空间,就称为“内核线程”;而如果共享用户空间映射就称为“用户线程”。

创建进程

在linux中,新进程是从一个已经存在的进程中复制出来的,内核使用静态数据结构造出0号进程,0号内核线程分叉生成1号内核线程和2号内核线程。1号内核线程完成初始化以装载用户程序,编程1号进程,其他进程都是1号进程或者它的子孙进程分叉生成的。

linux3个系统调用创建新的进程

  • fork(分叉):子进程是父进程的一个副本,采用写时复制技术。
  • vfork:用于创建子进程,之后子进程立即调用execve以装载新程序的情况,为了避免复制物理页,父进程会睡眠等待子进程装载新程序。现在fork采用了写时复制技术,vfor没什么速度优势,废弃了。
  • clone(克隆):可以精确地控制子进程和父进程共享哪些资源。这个系统调用的主要用处是可供pthread库用来创建线程。clone是功能齐全的函数,参数多使用复杂,fork是clone的简化函数。
    来看下代码,如下图:
    fork
    vfork
    clone

do_fork函数

do_fork()函数负责处理clone(),fork(),vfork()系统调用。来看看do_fork()函数的执行流程。如下图:
do_fork()
_do_fork()
可以看到,具体的核心处理在copy_process()函数中。

copy_process函数

先来看下这个函数的主要流程,如下图:
copy_process函数流程
代码贴一点,能看到多少,看多少吧,然后顺着代码配合上边的图,理解下整个流程。
copy_process()

撤销进程

进程终止的一般方式是调用exit()库函数,该函数释放c函数库分配的资源,执行程序所注册的每个函数,并结束从系统回收进程的那个系统调用。

小结

本篇只是简单的写了进程这一章,毕竟,后边还有2章写的是这个概念,后边慢慢写。随时补充新的内容。感兴趣,可以一起学习学习。OK,结束。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1976019.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

图像像素增强albumentations库的使用

albumentations是一个快速的图像增强库,用于机器学习任务。它支持各种类型的图像变换,包括但不限于旋转、平移、缩放、剪切、翻转、噪声注入、遮挡等。albumentations库可以与深度学习框架如PyTorch和TensorFlow很好地集成, 支持种类丰富的像素级变换,包括雨天、雾天、色域变…

使用Python绘制雷达图的简单示例

雷达图(Radar Chart)也被称为蜘蛛网图、星形图或极坐标图,是一种用于显示多变量数据的图形方法。它以一个中心点为起点,从中心点向外延伸出多条射线,每条射线代表一个特定的变量或指标。每条射线上的点或线段表示该变量…

面试官:如何保证缓存和数据库的一致性?

你好呀,我是苍何! 办公室里鸦雀无声,我木然的看着窗外射进来的阳光,它照在光滑的地板上,又反射到天花板上,再从天花板上反射下来时,就变成一片弥散的白光。 我在白光里偷偷放了一个恶毒的臭屁…

二百五十四、OceanBase——Linux上安装OceanBase数据库(四):登录ocp-express,配置租户管理等信息

一、目的 在部署OceanBase成功后,接下来就是登录ocp-express,配置租户管理等信息! 二、ocp-express网址以及账密信息 三、实施步骤 1 登录ocp-express 2 集群总览 3 租户管理 3.1 新建租户 3.2 配置新租户信息 剩下的几个模块了解即可&am…

redis实现的分布式锁redisson

redis服务宕机出现的概率很低,redis集群整体的思想是AP思想(优先保证高可用性) 如果非要保证业务数据强一致性建议采用CP思想,用zookeeper实现分布式锁。

C++自定义接口类设计器之模板代码生成四

关键代码 QStringList multis templateStr.split(\n);bool startConfig false;bool startVar false;bool startTemplate false;for (const auto& line : multis) {if(startConfig) {if(line.trimmed().startsWith("camealCase")) {auto name_val line.split…

Web开发-html篇-上

HTML发展史 HTML的历史可以追溯到20世纪90年代初。当时,互联网尚处于起步阶段,Web浏览器也刚刚问世。HTML的创建者是蒂姆伯纳斯-李(Tim Berners-Lee),他在1991年首次提出了HTML的概念。HTML的初衷是为了方便不同计算机…

TOA/TDOA测距定位,三维任意(>3)个锚节点,对一个未知点进行定位|MATLAB源代码

目录 程序介绍程序截图和运行结果程序截图运行结果 源代码代码修改建议 程序介绍 TOA/TDOA使用三点法测距,在空间中,有4个锚节点就可以定位,但如果有多个节点,定位效果会更好。 锚点不同时,修改程序中的向量和矩阵维度…

C++——哈希结构

1.unordered系列关联式容器 本节主要介绍unordered_map和unordered_set两个容器&#xff0c;底层使用哈希实现的 unordered_map 1.unordered_map是储存<key,value>键值对的关联式容器&#xff0c;其允许通过key快速查找到对应的value&#xff0c;和map非常相似&#x…

JavaFX布局-ToolBar

JavaFX布局-ToolBar 常用属性orientationpadding 实现方式Java实现fxml实现 容纳一组按钮的容器支持水平、垂直布局内容太多&#xff0c;会自动折叠 常用属性 orientation 排列方式&#xff0c;Orientation.VERTICAL、Orientation.HORIZONTAL flowPane.setOrientation(Orient…

【时时三省】(C语言基础)函数递归练习

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ——csdn时时三省 求字符串长度 求的是arr里面字符串的长度 abc后面还有一个\0为结束标志 在结算字符串长度的时候不算\0 所以它的长度是3 模拟实现一个strlen函数 str等于\0的时候就会结束返回count 如果…

纯css的loading效果

在之前的文章里面实现loading组件的封装 其实在日常生活中我们可以采用纯css的组件方式实现loading 的效果 其中<p>元素被绝对定位在其父元素的中心&#xff0c;并且其内部的文本大小和对行间距&#xff08;line-height&#xff09;是响应式的&#xff0c;基于视口宽度&…

《工程检索增强生成系统时的七个失败点》论文 AI 解读

周末使用 AI 速度了一篇 RAG 相关的论文&#xff0c;文中提到的【设计 RAG 系统时需要考虑的七个失败点】非常有价值&#xff0c;简单整理一下分享出来&#xff0c;大家如果感兴趣可以继续阅读原文。 论文名称&#xff1a;Seven Failure Points When Engineering a Retrieval A…

php反序列化靶机serial实战

扫描ip,找到靶机ip后进入 他说这是cookie的测试网页&#xff0c;我们抓个包&#xff0c;得到cookie值 base64解码 扫描一下靶机ip的目录 发现http://192.168.88.153/backup/&#xff0c;访问 下载一下发现是他的网页源码 通过代码审计&#xff0c;发现 通过代码审计得知&…

盘点和讯飞语音转文字一样好用的4款转换工具。

语音转文字能够快速准确地记录下人们的发言&#xff0c;使用相应的工具能够让我们不用担心遗漏重要信息&#xff0c;或者花费大量时间手动整理成文字内容。很多人都知道讯飞语音转文字&#xff0c;但是现在网络上也有很多其他好用的工具&#xff0c;就比如这4款&#xff1a; 1、…

Spring的配置类分为Full和Lite两种模式

Spring的配置类分为Full和Lite两种模式 首先查看 Configuration 注解的源码, 如下所示: Target({ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) Documented Component public interface Configuration {AliasFor(annotation Component.class)String value() defau…

Apache解析漏洞~CVE-2017-15715漏洞分析

Apache解析漏洞 漏洞原理 # Apache HTTPD 支持一个文件拥有多个后缀&#xff0c;并为不同后缀执行不同的指令。比如如下配置文件&#xff1a; AddType text/html .html AddLanguage zh-CN .cn# 其给 .html 后缀增加了 media-type &#xff0c;值为 text/html &#xff1b;给 …

WordPress资源下载类主题 CeoMax-Pro_v7.6绕授权开心版

CeoMax-Pro强大的功能 在不久的将来Ta能实现你一切幻想&#xff01;我们也在为此而不断努力。适用于资源站、下载站、交易站、素材站、源码站、课程站、cms等等等等&#xff0c;Ta 为追求极致的你而生。多风格多样式多类型多行业多功能 源码下载&#xff1a;ceomax-pro7.6.zip…

<数据集>航拍行人识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;7482张 标注数量(xml文件个数)&#xff1a;7482 标注数量(txt文件个数)&#xff1a;7482 标注类别数&#xff1a;1 标注类别名称&#xff1a;[people, pedestrian] 序号类别名称图片数框数1people5226385602pedes…

hcip作业1

写网关 r1 <Huawei>system-view [Huawei]sysname r1 [r1]interface GigabitEthernet 0/0/0 [r1-GigabitEthernet0/0/0]ip address 192.168.1.1 24 [r1]interface g 0/0/1 [r1-GigabitEthernet0/0/1]ip address 192.168.3.1 24 [r1]interface LoopBack 0 [r1-LoopBack0…