【Linux】初识进程

目录

操作系统是什么

设计操作系统的目的

操作系统的定位

如何理解管理

管理的本质

管理的例子

计算机的管理概念图

操作系统管理逻辑的六字真言

系统调用和库函数的概念

进程

进程的概念

什么是PCB?

PCB的主要内容

如何查看进程?

通过系统调用获取进程标识符

Linux中创建进程

认识fork

fork有两个返回值

如何实现一个变量接受两个返回值的呢?

父子进程代码共享,数据各自开辟空间,私有一份(采用写时拷贝)

创建进程的过程概况

小结


操作系统是什么

  • 在介绍进程之前,我们先回顾一下操作系统的概念:任何计算机都包含一个基本的程序集合,这个集合我们称做操作系统。宽泛的来讲,操作系统可以分为内核(进程管理、内存管理、文件管理、驱动管理)和其他程序两大部分(函数库、shell程序等)。

设计操作系统的目的

  1. 与硬件交互,管理所有软件资源

  2. 为用户程序(应用程序)提供一个良好的执行环境

操作系统的定位

  • 在整个计算机体系架构中,操作系统是一款纯正的搞管理的软件,管理的是资源

如何理解管理

管理的本质

  • 管理的本质实际上就是管理数据

管理的例子

  • 在一个大型制造公司中,有多个部门和不同层级的管理人员。公司的管理结构可以分为高层管理层、中层管理层和基层管理层。高层管理层:由公司的CEO(首席执行官)、CFO(首席财务官)、COO(首席运营官)等组成。他们负责制定公司的战略方向、决策重要事项,并对整个公司的运营和业绩负责。中层管理层:包括各个部门的经理、主管等,他们负责执行公司制定的战略方针,管理团队成员的日常工作,协调部门间的合作与沟通,确保部门目标的达成。基层管理层:由领班、班长等组成,他们负责具体的生产、运营工作。他们需要执行中层管理层下达的任务,指导员工完成具体工作,解决实际生产过程中的问题。通过这个例子,可以清晰地展示层级管理在一个组织中的运作方式。不同层级的管理人员各自承担着不同的责任和角色,共同协作使得整个组织能够高效运转,达成既定的目标和使命。

计算机的管理概念图

操作系统管理逻辑的六字真言

  • 先描述再组织

  • 描述:我们在管理一个对象之前要知道它有什么属性,换到计算机当中就是用类去表示,如:学生的学号、班级、姓名,这样在学生调皮捣蛋的时候能重拳出击。

  • 组织:在描述完这个对象之后,便可以将抽象的管理转变成现实的数据结构的增删查改。

系统调用和库函数的概念

  • 在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用。

  • 系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。

  • 系统调用是形成库的基础

进程

进程的概念

  • 程序是静态的文件,存储在磁盘上,而进程是程序在内存中的执行实例。

  • 进程 = 可执行程序+PCB

什么是PCB?

  • 按照上面的说法,我们要管理进程,首先就要描述进程

  • 进程控制块(Process Control Block,PCB)是操作系统中用于描述和管理进程状态及相关信息的数据结构。每个正在系统中运行的进程都有一个对应的 PCB,操作系统使用 PCB 来跟踪和管理进程的执行。如此,对进程的管理便变成了对PCB的增删查改

PCB的主要内容

  • 标示符: 描述本进程的唯一标示符,用来区别其他进程

  • 状态: 任务状态,退出代码,退出信号等

  • 优先级: 相对于其他进程的优先级

  • 程序计数器: 程序中即将被执行的下一条指令的地址

  • 内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针

  • 上下文数据: 进程执行时处理器的寄存器中的数据

  • I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表

  • 记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等

  • 其他信息

如何查看进程?

  • 查看/proc文件夹即可

ls /proc/

  • 使用ps、top等用户级工具

ps aux | grep test | grep -v grep

通过系统调用获取进程标识符

  • 进程id(PID)

  • 父进程id(PPID)

#include<stdio.h>
#include <unistd.h>int main()
{while(1){printf("i am a process my pid : %d,my father pid :%d\n",getpid(),getppid());sleep(1);}
}

Linux中创建进程

  1. 命令行中直接启动进程:启动程序的本质就是创建进程,一般是通过父进程创建的,一般使用命令行创建的进程都是bash子进程

  2. 通过代码来创建:使用fork函数来创建子进程,fork前只有父进程执行代码,fork之后,父子进程都执行代码

认识fork

  • 使用 man 3 fork来了解fork的使用

fork有两个返回值

  • 父进程中:当fork()在父进程中被调用时,fork()会返回新创建的子进程的进程ID(PID),这个 PID 就是子进程的标识符。父进程可以通过这个返回的 PID 来识别和管理其创建的子进程。

  • 子进程中:在子进程中,fork()的返回值为0。这是因为子进程是父进程的副本,所以子进程中的fork()返回值为0,表示这是子进程的执行环境。

  • 错误情况:如果fork()调用失败,返回值为-1,表示创建子进程失败。在这种情况下,通常会设置全局变量errno来指示具体的错误类型,比如内存不足等。

  • 因此,通过检查fork()的返回值,父进程和子进程可以根据返回值来确定自己是父进程还是子进程,并进行不同的处理逻辑。这个通常使用分支语句if来实现。

如何实现一个变量接受两个返回值的呢?
  #include <stdio.h>#include <sys/types.h>#include <unistd.h>int main(){int ret = fork();if(ret < 0){perror("fork");return 1;}else if(ret == 0){ //childprintf("I am child : %d!, ret: %d\n", getpid(), ret);}else{ //fatherprintf("I am father : %d!, ret: %d\n", getpid(), ret);}sleep(1);return 0;}       
  • 执行一个程序却有两个结果

  • 操作系统是通过一些寄存器做到返回值返回两次的

父子进程代码共享,数据各自开辟空间,私有一份(采用写时拷贝)

  • fork创建子进程,系统便会多一个子进程,以父进程为模板,为子进程创建PCB,但创建的子进程没有代码和数据,目前和父进程共享代码和数据,所以fork之后,父子进程会执行一样的代码。

创建进程的过程概况

  1. 找到父进程的PCB

  2. malloc(task_stract)

  3. 根据父进程的PCB,初始化子进程的PCB

  4. 让子进程的PCB指向父进程的代码程序数据

  5. 将子进程放入调度队列中,和父进程一样去排队...

  6. 执行完一系列操作后便返回xxx

小结

  • 综上,我们知道了管理进程要先描述,再组织,所以便有了PCB用来描述进程,进程的创建方式有命令行和代码两种,使用代码创建进程时我们要用到fork函数,fork函数有两个返回值,子进程和父进程共享代码和数据,且数据以写时拷贝的形式。对于fork函数,后面会专门写一篇博客来介绍,祝同志们生活顺利、学业有成QVQ

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

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

相关文章

NO9 蓝桥杯单片机实践之串口通信的使用

1 回顾 串口通信的代码编写结构还是与中断一样&#xff0c;不同的是&#xff1a; 初始中断函数条件涉及到串口通信相关的寄存器和定时器1相关的寄存器&#xff08;定时器1用于产生波特率&#xff09;&#xff0c;但初始条件中的中断寄存器只考虑串口通信而不考虑定时器1。 vo…

CMake笔记之将任意官方库作为third_party完整地包含在工程项目中使用的通用模板

CMake笔记之将任意官方库作为third_party完整地包含在工程项目中使用的通用模板 —— 杭州 2024-03-20 凌晨1:06 code review! 文章目录 CMake笔记之将任意官方库作为third_party完整地包含在工程项目中使用的通用模板1.通用CMakeLists.txt模板2.GPT4给出的改进建议3.git clon…

华为综合案例-普通WLAN全覆盖配置(2)

组网图 结果验证 在AC_1和AC_2上执行display ap all命令&#xff0c;检查当前AP的状态&#xff0c;显示以下信息表示AP上线成功。[AC_1] display ap all Total AP information: nor : normal [1] ExtraInfo : Extra information P : insufficient power supply ---…

wireshark抓tcp包使用指南

本博文源于笔者不断探索加上去网络总结获得的经验&#xff0c;撰写wireshark如何抓tcp包 文章目录 1、打开wireshark2、选择网络源3、搜索ip地址与tcp条件4、看灰色的条纹 1、打开wireshark 2、选择网络源 选择自己当前的ip地址适用于的网络源&#xff0c;比如这里选择“以太…

ideaSSM 高校公寓交流员管理系统bootstrap开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 idea 开发 SSM 高校公寓交流管理系统是一套完善的信息管理系统&#xff0c;结合SSM框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&…

get_local_ip.bat:快速获取IPv4地址

批处理脚本&#xff0c;用于在Windows命令提示符下获取本地计算机的IPv4地址。 echo off ipconfig | findstr IPv4 pause - echo off&#xff1a;这会关闭命令提示符窗口中的命令回显&#xff0c;使得在运行脚本时不会显示每条命令的执行结果。 - ipconfig&#xff1a;这是一…

ELK快速搭建图文详细步骤

目录 一、下载地址二、安装docker-compose(已安装则跳过)三、初始化ELK1. 赋予/setup/entrypoint.sh执行权限2. 初始化 docker-elk 所需的 Elasticsearch 用户和组3. 重置默认用户的密码4. 替换配置文件中的用户名和密码5. 重启 Logstash 和 Kibana&#xff0c;使用新密码重新连…

鲁棒的基于表面势的GaN HEMT集成电路紧凑模型

来源&#xff1a;Robust Surface-Potential-Based Compact Model forGaN HEMT IC Design&#xff08;TED 13年&#xff09; 摘要 我们提出了一种精确且稳健的基于表面势的紧凑模型&#xff0c;用于模拟采用氮化镓高电子迁移率晶体管&#xff08;GaN HEMT&#xff09;设计的电…

关于vuex 的模块开发和使用

1、文件结构 2、modules 文件内容 例子&#xff1a; ccc.js 文件内容如下&#xff1a; // 基础配置项 const state {aa: [] }const mutations {setaa (state, data) {state.aa data} }const actions {} export default {namespaced: true, state,mutations,actions } **注…

高效编写产品规格书的秘诀与注意事项

高效编写产品规格书的秘诀&#xff1a;学会利用简单的工具&#xff0c;写出效果最佳的产品规格书。比如&#xff0c;你可以使用HelpLook、Markdown编辑器、LaTeX、notion等。 在快节奏的商业环境中&#xff0c;产品规格书是企业向市场展示产品特性和优势的重要工具。一份清晰、…

quartz整合前端vue加后端springboot

因工作需求&#xff0c;需要能修改定时的任务&#xff0c;前端vue3&#xff0c;后端是springboot 看看页面效果&#xff1a; 首先maven加上引入 <dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><versi…

电源配小了,是不是容易烧?是的!

电源小的话会不会容易烧毁&#xff1f; 是的。 功率电压*电流。 随着功率增大&#xff0c;电压不变&#xff0c;电流增大&#xff0c;发热量增大&#xff0c;可能会烧毁。 今天给大家推荐一款650w的电脑电源&#xff0c;不过在推荐之前&#xff0c;首先要确认自己的电脑功耗…

串行通信接口之RS232、RS485与RS422

前言 RS232&#xff0c;RS485&#xff0c;RS422都是串口通信协议家族的一员&#xff0c;那么他们有什么区别呢&#xff1f;首先让我们来了解俩个简单的知识点&#xff0c;TTL电平以及CMOS电平&#xff0c;单端传输以及差分传输。 TTL电平 TTL电平接口电路由晶体管构成&#x…

Oracle19C静默安装教程

文章目录 一、安装前的准备1、安装Linux操作系统2、配置网络源或者本地源3、hosts文件配置 二、准备安装环境1、安装依赖包2、创建oracle用户组3、配置系统内核参数4、关闭selinux5、配置oracle用户环境6、修改用户的Shell限制 三、静默安装Oracle数据库1、创建oracle安装目录2…

spring MVC是如何找到html文件并返回的?

Spring MVC 搜索路径 启动一个SpringBoot项目时&#xff0c;访问http://localhost:8080&#xff0c;对于SpringMVC&#xff0c;它会默认把这段url看成http://localhost:8080/index.html&#xff0c;所以这两个url是等价的。 .html, .css, .js, .img …都是静态资源文件&#x…

基于Spring Boot+Vue的社区医院管理系统

末尾获取源码作者介绍&#xff1a;大家好&#xff0c;我是墨韵&#xff0c;本人4年开发经验&#xff0c;专注定制项目开发 更多项目&#xff1a;CSDN主页YAML墨韵 学如逆水行舟&#xff0c;不进则退。学习如赶路&#xff0c;不能慢一步。 目录 一、项目简介 一、研究背景 二…

ubuntu20.04搭建rtmp视频服务

1.安装软件 sudo apt-get install ffmpeg sudo apt-get install nginx sudo apt-get install libnginx-mod-rtmp 2.nginx配置 修改/etc/nginx/nginx.conf文件&#xff0c;在末尾添加&#xff1a; rtmp {server {listen 1935;application live {live on;}} } 3.视频测试 本…

idea创建maven-archetype-quickstart框架无法显示src/目录

一、配置好idea中Maven目录 1、不使用idea自带Maven&#xff0c; 2、配置好Maven环境变量M2_HOME 3、修改maven中 setting.xml文件 <?xml version"1.0" encoding"UTF-8"?><settings xmlns"http://maven.apache.org/SETTINGS/1.2.0"…

【Qt】常用控件

目录 一、控件概述 二、QWidget 三、Buttons类控件 3.1 QPushButton 3.2 QRadioButton 3.3 QCheckBox 3.4 QToolButton 四、Display Widgets&#xff08;显示类控件&#xff09; 4.1 QLabel 4.2 QLCDNumber 4.3 QProgressBar 4.4 QCalendarWidget 五、Input Widge…

C#中右键通过listview来控制datagridview字段值的是否显示、显示顺序,并存储到XML中。

最终显示效果&#xff0c;如下图所示&#xff1a; datagridview开始显示通过调用XML存储的字段值及顺序来显示&#xff0c;右键调出Tools来控制显示的顺序及是否显示&#xff0c;通过加号和减号进行调整顺序。 XML存储字段值及顺序 主要代码及事件&#xff1a; 获取datagridv…