Linux:进程概念

news2024/9/22 6:20:26

文章目录

  • 进程概念
    • 1、冯诺依曼体系结构
    • 2、进程
      • 2.1基本概念
      • 2.2描述进程-PCB
      • 2.3组织进程
      • 2.4查看进程
      • 2.5通过系统调用获取进程标识符
      • 2.6通过系统调用创建进程-fork初识

进程概念

1、冯诺依曼体系结构

目前我们认识的计算机中,都是由一个个硬件构成

  • 输入单元:键盘、鼠标、写字板等
  • 中央处理器(CPU):含有运算器和控制器等
  • 输出单元:显示器,打印机等

对于冯诺依曼一些结构,有以下几点注意:

  • 存储器指的是内存
  • 不考虑缓存情况,这里的CPU能且只能对内存进行读写, 不能访问外设
  • 外设(输入设备或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取
  • 总结就是:所有设备只能直接和内存打交道

总的来说,对冯诺依曼体系结构的理解,不能停留在概念上,要深入到对软件数据流的理解上,例如,解释从登陆上qq开始和某个好友聊天这个过程中数据的流动过程:

2、进程

2.1基本概念

程序的一个执行实例,正在执行的程序等。担当分配系统资源(CPU时间,内存)的实体。

2.2描述进程-PCB

进程信息被放在进程控制块(一个数据结构),叫做PCB,Linux操作系统下的PCB是task_struct

task_struct内容分类

  • **标识符:**描述本进程的唯一标识符,用来区别其他进程
  • **状态:**任务状态,推出代码,推出信号
  • **优先级:**相对于其他进程的优先级
  • **程序技术器:**程序中即将被执行的下一条指令的地址
  • **内存指针:**包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
  • **上下文数据:**进程执行时处理器的寄存器中的数据
  • **io状态信息:**包括显示器的io请求,分配给进程的io设备和被进程使用的文件列表
  • **记账信息:**可能包括处理器时间总和,使用的时钟数总和,时间限制,记帐号等

2.3组织进程

可以在内核源代码里找到,所有运行系统里的进程都以task_struct链表的形式存在内核里

2.4查看进程

如:要获取PID为1的进程信息,你需要查看 /proc/1 这个文件夹。

大多数进程信息同样可以使用top和ps这些用户级工具来获取

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

  • 进程id(PID)
  • 父进程id(PPID)
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
 	printf("pid: %d\n", getpid());
 	printf("ppid: %d\n", getppid());
 	return 0;
}

2.6通过系统调用创建进程-fork初识

  • 使用man手册运行man fork认识fork函数
  • fork有两个返回值
  • 父子进程代码共享,数据各自开辟空间,私有一份(采用写时拷贝)
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
	int ret = fork();
 	printf("hello proc : %d!, ret: %d\n", getpid(), ret);
 	sleep(1);
 	return 0;
}
  • 使用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){ //child
     	printf("I am child : %d!, ret: %d\n", getpid(), ret);
     }else{ //father
     	printf("I am father : %d!, ret: %d\n", getpid(), ret);
     }
     sleep(1);
     return 0;
    }
    

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

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

相关文章

c语言基础-------指针变量作为函数参数

指针变量作为函数参数 在 C 语言中&#xff0c;指针变量作为函数参数是一种常见的做法&#xff0c;它允许函数修改通过指针传递的变量。这是通过指针的地址传递实现的&#xff0c;而不是通过值传递。 指针作为函数参数的优点 修改原始数据&#xff1a;当函数接受一个指针作…

经典游戏,用java实现的坦克大战小游戏

今天给大家分享一个使用java编写的坦克大战小游戏&#xff0c;整体还是挺好玩的&#xff0c;通过对这款游戏的简单实现&#xff0c;加深对java基础的深刻理解。 一、设计思路 1.坦克大战小游戏通过java实现&#xff0c;其第一步需要先绘制每一关对应的地图&#xff0c;地图包括…

机器学习(5)--正则化之L1和L2正则化

文章目录 正则化一、正则化的基本原理二、L1正则化&#xff08;Lasso&#xff09;三、L2正则化&#xff08;Ridge&#xff09;四、L1与L2正则化的比较 总结 正则化 正则化是一种在机器学习和深度学习中常用的技术手段&#xff0c;旨在提高模型的泛化能力&#xff0c;减少过拟合…

深入探讨C语言中的高级指针操作

目录 指针与内存管理的高级技巧 1. 动态数组的重新分配 2. 内存碎片化的处理 3. 内存对齐 函数指针数组与回调函数的高级用法 1. 基本函数指针用法 2. 函数指针数组 3. 回调函数的使用 指针与数据结构的结合 1. 自定义链表 C语言以其强大的底层操作能力和高效的性能著…

【信创】Linux下EFI引导配置工具efibootmgr _ 统信 _ 麒麟 _ 方德

往期好文&#xff1a;deepin V23 Release 安装与功能介绍&#xff01;&#xff01;&#xff01; Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于在信创操作系统上使用EFI引导管理器配置工具efibootmgr命令详解的文章。efibootmgr是一个在基于UEFI的系统中管理EF…

AI数字员工技能全开,招生、培训、写教案,样样都行

只需要几个AI数字员工&#xff0c;就可以协助您办一所高质量的学校。 教务管理、教师培训、招生咨询、家校沟通、学生评价、资料整理、学习伴侣、写教案、总结、学生评语等。 这些都可以用AI数字员工来完成。 比如&#xff0c;AI培训专员给教师做制度培训、教学培训&#xf…

裴蜀定理相关结论

裴蜀定理: axbygcd(a,b) 必定有解 1. 有无限个数凑不出来 有无限个数凑不出来 2. 最大凑不出的数字 在 的条件下&#xff0c;最大凑不出的数为 推广&#xff1a;若数字数目大于2&#xff0c;gcd仍然为1&#xff0c;最大凑不出来的数字一定小于上面的结论值&#xff0c;即局…

计算机网络——TCP协议与UDP协议详解(上)

一、前言 1.1 再次理解传输层 传输层是计算机网络中的一层&#xff0c;位于网络层和应用层之间。它主要负责在网络中的两个端系统之间提供可靠的、端到端的数据传输服务。简单理解&#xff0c;传输层就是负责在源主机和目标主机之间提供端到端的数据传输。 传输层的两个主要协…

EasyRecovery 16/17数据恢复软件2024最新永久破解版激活码注册码分享

EasyRecovery &#xff08;易恢复中国&#xff09;是由全球著名数据厂商Ontrack 出品的一款数据文件恢复软件。支持恢复不同存储介质数据&#xff1a;硬盘、光盘、U盘/移动硬盘、数码相机、Raid文件恢复等&#xff0c;能恢复包括文档、表格、图片、音视频等各种文件。 开发背…

鸿蒙开发5.0【基于ArkUI的验证码】实现

场景描述 场景一&#xff1a;基于自定义键盘的验证码实现&#xff0c;进入页面后直接输入验证码&#xff0c;第一个验证码输入完后可自动跳到下一个&#xff0c;拉起的键盘是自定义数字键盘&#xff0c;验证码的输入框带选中效果。 场景二&#xff1a;基于系统键盘的验证码实…

顶顶通呼叫中心中间件-一句话识别语音识别安装步骤

顶顶通呼叫中心中间件-一句话模型安装步骤&#xff0c;对接mod_vad。一句话识别&#xff08;http接口提交录音文件识别&#xff09; 一、安装一句话模型 一句话识别&#xff08;http接口提交录音文件识别&#xff09;&#xff0c;比如对接mod_vad(老电话机器人接口) curl -s…

C#中的多线程案例

使用Task写一个进度条 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.For…

【有手就行】:从无到有在win10上用docker搭建svn服务器

前言 之所以要搭建svn服务器&#xff0c;是因为在用docker打包项目时方便&#xff0c;如果没有svn就需要手动拷贝项目到容器内&#xff0c;用svn直接update就可以轻松拿到最新代码&#xff0c;岂不快哉 准备工作 1、先安装docker&#xff0c;请移步 docker安装 2、选择svn-s…

【每日力扣中医养生】力扣2608. 图中的最短环

2608. 图中的最短环 文章目录 【每日力扣&中医养生】力扣2608. 图中的最短环题目描述示例示例 1示例 2 输入输出说明解题思路Python代码复杂度分析总结 【每日力扣&中医养生】力扣2608. 图中的最短环 《黄帝内经》阴阳应象大论篇第五&#xff0c;提到“秋伤于湿&…

Leetcode 209,713,3 滑动窗口 C++实现

Leetcode 209. 长度最小的子数组 问题&#xff1a;给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其总和大于等于 target 的长度最小的子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c…

redis 遍渐进式历

1.scan cursor [match pattern] [coutn] [type]:以渐进式的方式进行建的遍历 cursor:是光标 指向当前遍历的位置 设置成0表示当前从0开始获取 math parttern &#xff1a;和keys命令一样的 keys * count: 限制一次遍历能够获取到多少个 元素默认是10 type :这次遍历只想获取…

数据库原理--关系模型简述

目录 一、关系模型研究什么 二、关系模型的三要素 三、关系模型与关系数据库语言的关系 一、关系模型研究什么 一个关系(relation)就是一个表(Table),关系模型就是处理Table的&#xff0c;它由三个部分组成: 描述DB各种数据的基本结构(Table/Relation)描述Table与Table之间…

Docker安装Redis集群记录

redis集群整体的安装效果 备注&#xff1a;本机docker容器的宿主机ip为192.168.0.200&#xff0c;下面的配置全部基于当前IP进行配置&#xff1b; 1 docker镜像下载使用的国内地址 vi /etc/docker/daemon.json{"registry-mirrors": ["https://ustc-edu-cn.mir…

苹果手机怎么还原删除的照片?4个【独门秘籍】都在这里了

苹果手机的拍照功能深受广大用户的喜爱&#xff0c;大家出行旅游也大都选择苹果手机拍照记录&#xff0c;因此手机相册也就成为用户们的【生活回忆录】。但是&#xff0c;我们总是会因为各种各样的原因导致相册里的照片消失不见&#xff0c;对此&#xff0c;我们要怎么还原删除…

《计算机组成原理》(第3版)课后习题答案

第1篇 概 论 1&#xff0e;什么是计算机系统、计算机硬件和计算机软件&#xff1f;硬件和软件哪个更重要&#xff1f; 答&#xff1a;计算机系统&#xff1a;由计算机硬件和软件两部分组成&#xff0c;计算机系统具有接收和存储信息、按程序快速计算和判断并输出处理结果等功…