【Linux学习笔记】初识进程概念和进程PCB
【Linux学习笔记】初识冯诺依曼体系和进程PCB

🔥个人主页:大白的编程日记
🔥专栏:Linux学习笔记

文章目录
- 【Linux学习笔记】初识冯诺依曼体系和进程PCB
- 前言
- 一. 冯诺依曼体系结构
- 1.1 关于冯诺依曼体系的要点:
- 二. 操作系统(Operating System)
- 2.1 概念
- 2.2 设计OS的目的
- 2.3 核心功能
- 2.4 如何理解“管理”
- 2.5 系统调用和库函数概念
- 三. 进程
- 3.1 基本概念与基本操作
- 3.1.2 描述进程 - PCB
- 3.1.3 task_struct
- 3.1.5 查看进程
- 3.1.6 通过系统调用获取进程标识符
- 3.1.7 通过系统调用创建进程 - `fork`初识
- 后言
前言
哈喽,各位小伙伴大家好!上期我们讲了gdb和cgdb 今天我们讲的是初识冯诺依曼体系和进程PCB。话不多说,我们进入正题!向大厂冲锋!
一. 冯诺依曼体系结构
我们常见的计算机,如笔记本,以及不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。计算机由以下硬件组件组成:

- 输入单元:包括键盘、鼠标、扫描仪、写字板等
- 中央处理器(CPU):含有运算器和控制器等
- 输出单元:显示器、打印机等
1.1 关于冯诺依曼体系的要点:
- 存储器指的是内存
- CPU只能对内存进行读写,不能直接访问外设(输入或输出设备)
- 外设要输入或输出数据,只能通过内存进行交互
- 所有设备都只能直接和内存打交道

关于冯诺依曼,必须强调几点:
- 这里的存储器指的是内存
- 不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)
- 外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。
- 一句话,所有设备都只能直接和内存打交道。
📌 注意:
对冯诺依曼的理解,不能停留在概念上,要深入到对软件数据流理解上,请解释,从你登录上qq开始和某位朋友聊天开始,数据的流动过程。从你打开窗口,开始给他发消息,到他的消息之后的数据流动过程。如果是在qq上发送文件呢?

二. 操作系统(Operating System)

2.1 概念
操作系统(OS)是计算机系统中一个基本的程序集合,包括:
- 内核(进程管理、内存管理、文件管理、驱动管理)
- 其他程序(如函数库、shell程序等)

2.2 设计OS的目的
- 对下:与硬件交互,管理所有软硬件资源
- 对上:为用户程序(应用程序)提供良好的执行环境


2.3 核心功能
操作系统在整个计算机软硬件架构中的定位是:一款存正“搞管理”的软件。
2.4 如何理解“管理”
- 管理的例子:学生、辅导员、校长
- 描述被管理对象
- 组织被管理对象

总结
计算机管理硬件: - 1.描述起来,用struct结构体
- 2.组织起来,用链表或其他高效的数据结构

2.5 系统调用和库函数概念

- 在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用。
- 系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。
承上启下
那在还没有学习进程之前,就问大家,操作系统是怎么管理进行进程管理的呢?很简单,先把进程描述起来,再把进程组织起来!

三. 进程
3.1 基本概念与基本操作
- 课本概念:程序的一个执行实例,正在执行的程序等
- 内核观点:担当分配系统资源(CPU时间、内存)的实体
3.1.2 描述进程 - PCB

- 基本概念
- 进程信息被放在一个叫做进程控制块(PCB)的数据结构中,是进程属性的集合
- 课本上称之为PCB(processcontrolblock),在Linux操作系统下的PCB是:task_struct。
- task_struct-PCB的一种
- 在Linux中描述进程的结构体叫做
task_struct。 - task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息。
3.1.3 task_struct
- 内容分类:
- 标示符:描述本进程的唯一标示符,用来区别其他进程。
- 状态:任务状态,退出代码,退出信号等。
- 优先级:相对于其他进程的优先级。
- 程序计数器:程序中即将被执行的下一条指令的地址。
- 内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
- 上下文数据:进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。
- I/0状态信息:包括显示的I/O请求,分配给进程的I/0设备和被进程使用的文件列表。
- 记账信息:可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
- 其他信息
- 具体详细信息后续会介绍

- 组织进程
所有运行在系统里的进程都以task_struct链表的形式存在于内核中。

3.1.5 查看进程
- 进程信息可以通过
/proc系统文件夹查看。例如,获取PID为1的进程信息,查看/proc/1文件夹。 - 大多数进程信息也可以通过
top和ps等用户级工具获取。

3.1.6 通过系统调用获取进程标识符
- 进程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;
}


3.1.7 通过系统调用创建进程 - fork初识
- 运行
man fork认识fork fork有两个返回值:
- 父进程返回值为子进程的PID
- 子进程返回值为0
#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){ // 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;
}

后言
这就是初识冯诺依曼体系和进程PCB。大家自己好好消化!今天就分享到这! 感谢各位的耐心垂阅!咱们下期见!拜拜~

相关文章:
【Linux学习笔记】初识进程概念和进程PCB
【Linux学习笔记】初识冯诺依曼体系和进程PCB 🔥个人主页:大白的编程日记 🔥专栏:Linux学习笔记 文章目录 【Linux学习笔记】初识冯诺依曼体系和进程PCB前言一. 冯诺依曼体系结构1.1 关于冯诺依曼体系的要点: 二. 操…...
深入探索 Linux Top 命令:15 个实用示例
在 Linux 系统管理中,top 命令是系统性能监控不可或缺的工具。它能够实时显示系统的 CPU、内存、进程等资源的使用情况,帮助您快速识别性能瓶颈和异常进程。本文将详细介绍 15 个实用的 top 命令使用示例,旨在帮助您更高效地进行系统管理与优…...
Linux命令-cut
cut 命令是一个非常实用的工具,用于从文本中提取特定部分。 参数 功能 -b 按字节提取内容 -c 按字符提取内容 -f 按字段提取内容,需配合 -d 指定分隔符 -d 指定字段分隔符(默认是 \t) -s 只处理包含分隔符的行 –complement 提取除…...
风电行业预测性维护解决方案:AIoT驱动下的风机健康管理革命
在风电行业向平价化与智慧化转型的关键阶段,如何通过预测性维护技术将风机可用率提升至99%以上?本文基于中讯烛龙系统的实战经验,解析如何构建基于LSTM、数字孪生与边缘计算的智能运维体系,实现从“故障维修”到“健康预判”的技术…...
通过Postman和OAuth 2.0连接Dynamics 365 Online的详细步骤
🌟 引言 在企业应用开发中,Dynamics 365 Online作为微软的核心CRM平台,提供了强大的Web API接口。本文将教你如何通过Postman和OAuth 2.0认证实现与Dynamics 365的安全连接,轻松调用数据接口。 📝 准备工作 工具安装…...
Ubuntu-安装redis
apt list | grep redis apt 类似于应用商店的感觉 ‘|’的作用是作为管道,把前者到的数据列表再通过grep筛选出包含redis字眼的一行数据 需要联网 apt install redis -y 修改配置文件 vi /etc/redis/redis.conf redis是客户端服务器程序 需要先把服务器给后台启…...
Mac 上使用 mysql -u root -p 命令,出现“zsh: command not found: mysql“?
一、确定 MySQL 安装路径: 如果你是使用 Homebrew 安装的 MySQL,通常安装路径是 /usr/local/mysql/bin 。 如果你是通过官方 DMG 安装包安装的 MySQL,默认安装路径可能是 /usr/local/mysql/bin 。你可以在终端中使用以下命令来查找 MySQL 的…...
P1883 【模板】三分 | 函数
题目描述 给定 n 个二次函数 f1(x),f2(x),…,fn(x)(均形如 ax2bxc),设 F(x)max{f1(x),f2(x),...,fn(x)},求 F(x) 在区间 [0,1000] 上的最小值。 输入格式 输入第一行为正整数 T,表示有 T 组数据。 每组…...
制造装备物联及生产管理ERP系统设计与实现(代码+数据库+LW)
摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装制造装备物联及生产管理ERP系统软件来发挥其高效地信息处理…...
[ctfshow web入门] web4
前置知识 robots.txt是机器人协议,在使用爬虫爬取网站内容时应该遵循的协议。协议并不能阻止爬虫爬取,更像是一种道德规范。 假设robots.txt中写道 Disallow: /admind.php,那我就暴露了自己的后台,这属于信息泄漏,攻击…...
Java的Selenium的特殊元素操作与定位之iframe切换
iframe切换 四种切换方式: driver.switchTo().frame(index);driver.switchTo().frame(id);driver.switchTo().frame(name);driver.switchTo().frame(WebElement); 切换之后,回到默认内容页面(否则会找不到元素 driver.switchTo().defaultContent(); //iframe处…...
【JavaWeb-Spring boot】学习笔记
目录 <<回到导览Spring boot1. http协议1.1.请求协议1.2.响应协议 2.Tomcat2.1.请求2.1.1.apifox2.1.2.简单参数2.1.3.实体参数2.1.4.数组集合参数2.1.5.日期参数2.1.6.(重点)JSON参数2.1.7.路径参数 2.2.响应2.3.综合练习 3.三层架构3.1.三层拆分3.2.分层解耦3.3.补充 &…...
SQLmap工具使用
1. sqlmap介绍 sqlmap是一款自动化的SQL注入工具,用于检测和利用web应用程序中的SQL注入漏洞。不需要我们进行手注,当我们输入url地址后,会自动进行注入指令并将payload返回显示。 在kali中自带。在本机中需要下载,在相应的路径…...
OpenCV 实现对形似宝马标的黄黑四象限标定位
文章目录 功能背景代码效果 功能 实现对形似宝马标的黄黑四象限光学识别标定位 背景 大学同学遇到了这个场景,琢磨了下,以备不时之需。 代码 所用opencv版本:4.12 numpy2.2.4 scikit_learn1.6.1import time import cv2 import numpy as…...
2025 年 4 月补丁星期二预测:微软将推出更多 AI 安全功能
微软正在继续构建其 AI 网络安全战略,并于本月宣布在 Microsoft Security Copilot 中引入新代理。 他们引入了用于网络钓鱼分类的代理、用于数据丢失预防和内部风险管理的警报分类、条件访问优化、漏洞修复和威胁情报简报。 这些代理的目标是不断从这些不同学科中…...
从吉卜力漫画到艺术创造:GPT-4o多种风格绘图Prompt大全
在3月底,GPT-4o掀起了一阵吉卜力绘图浪潮,大家纷纷输入一张图片,让4o模型进行风格化迁移,其中吉卜力风格的漫画在社交媒体上最为火热。在大家争议4o的训练数据是否侵权和4o背后的技术原理的时候,我们先来玩一玩&#x…...
resttemplate设置params
如何使用RestTemplate设置请求参数 RestTemplate设置请求参数的方式根据请求类型(GET/POST)和参数形式(路径参数、查询参数、JSON请求体)有所不同,以下是具体实现方法: 一、GET请求参数设置 路径参数 使用…...
16.1Linux自带的LED灯驱动实验(知识)_csdn
前面我们都是自己编写 LED 灯驱动,其实像 LED 灯这样非常基础的设备驱动, Linux 内核已经集成了。 Linux 内核的 LED 灯驱动采用 platform 框架,因此我们只需要按照要求在设备树文件中添加相应的 LED 节点即可,本章我们就来学习如…...
【vLLM】使用 vLLM 对自定义实现模型进行高速推理
推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 介绍什么是 vLLM?处理 vLLM 中的多模态模型实现独特的视频生成模型转换为 vLLM 模型的策略准备输入标记序列如何添加多个多模式输入如…...
SQL Server 数据库实验报告
1.1 实验题目:索引和数据完整性的使用 1.2 实验目的: (1)掌握SQL Server的资源管理器界面应用; (2)掌握索引的使用; (3)掌握数据完整性的…...
在响应式网页的开发中使用固定布局、流式布局、弹性布局哪种更好
一、首先看下固定布局与流体布局的区别 (一)固定布局 固定布局的网页有一个固定宽度的容器,内部组件宽度可以是固定像素值或百分比。其容器元素不会移动,无论访客屏幕分辨率如何,看到的网页宽度都相同。现代网页设计…...
代码随想录算法训练营第三十八天 | 322.零钱兑换 279.完全平方数 139.单词拆分
322. 零钱兑换 题目链接:322. 零钱兑换 - 力扣(LeetCode) 文章讲解:代码随想录 视频讲解:动态规划之完全背包,装满背包最少的物品件数是多少?| LeetCode:322.零钱兑换_哔哩哔哩_b…...
linux提取 Suid提权入门 Sudo提权入门
前言 suid基本使用 Suid 是什么命令? suid 是管理员用户(root)可以对命令文件进行赋权 让其在低权限用户下下也可以保持root权限的执行能力 我现在是管理员我 使用网站用户查找信息的时候总是被阻拦没权限 查找的内容不完整 这个使用我…...
Talib库安装教程
1. 打开 https://github.com/cgohlke/talib-build 2. 点击 Releases 3. 选择对应版本下载(本人电脑win-amd64,python版本3.12) 4. 安装该库(进入该文件路径) pip install ta_lib-0.6.3-cp312-cp312-win_amd64.whl 5…...
TDengine 3.3.6.0 版本中非常实用的 Cols 函数
简介 在刚刚发布的 TDengine 3.3.6.0 版本 中,新增了一个非常实用的 函数COLS ,此函数用于获取选择函数所在行列信息,主要应用在生成报表数据,每行需要出现多个选择函数结果,如统计每天最大及最小电压,并报…...
LeetCode 249 解法揭秘:如何把“abc”和“bcd”分到一组?
文章目录 摘要描述痛点分析 & 实际应用场景Swift 题解答案可运行 Demo 代码题解代码分析差值是怎么来的?为什么加 26 再 %26? 示例测试及结果时间复杂度分析空间复杂度分析总结 摘要 你有没有遇到过这种情况:有一堆字符串,看…...
Python数据可视化-第4章-图表样式的美化
环境 开发工具 VSCode库的版本 numpy1.26.4 matplotlib3.10.1 ipympl0.9.7教材 本书为《Python数据可视化》一书的配套内容,本章为第4章 图表样式的美化 本章主要介绍了图表样式的美化,包括图表样式概述、使用颜色、选择线型、添加数据标记、设置字体…...
ROS Master多设备连接
Bash Shell Shell是位于用户与操作系统内核之间的桥梁,当用户在终端敲入命令后,这些输入首先会进入内核中的tty子系统,TTY子系统负责捕获并处理终端的输入输出流,确保数据正确无误的在终端和系统内核之中。Shell在此过程不仅仅是…...
系统思考:思考的快与慢
在做重大决策之前,什么原因一定要补充碳水化合物?人类的大脑其实有两套运作模式:系统1:自动驾驶模式,依赖直觉,反应快但易出错;系统2:手动驾驶模式,理性严谨,…...
音视频入门基础:RTP专题(21)——使用Wireshark分析海康网络摄像机RTSP的RTP流
一、引言 使用vlc等播放器可以播放海康网络摄像机的RTSP流: 网络摄像机的RTSP流中,RTSP主要用于控制媒体流的传输,如播放、暂停、停止等操作。RTSP本身并不用于转送媒体流数据,而是会通过PLAY方法使用RTP来传输实际的音视频数据。…...

