【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

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

  1. 组织进程
    所有运行在系统里的进程都以task_struct链表的形式存在于内核中。
3.1.5 查看进程
  1. 进程信息可以通过/proc系统文件夹查看。例如,获取PID为1的进程信息,查看/proc/1文件夹。
  2. 大多数进程信息也可以通过topps等用户级工具获取。

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有两个返回值:
  1. 父进程返回值为子进程的PID
  2. 子进程返回值为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。大家自己好好消化!今天就分享到这! 感谢各位的耐心垂阅!咱们下期见!拜拜~

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

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

相关文章

7.3 主成分分析(PCA)

一、协方差矩阵 这节是介绍 SVD 在统计和数据分析中的一个主要应用&#xff0c;即主成分分析。例子来自于人类的基因组&#xff0c;脸部识别和金融&#xff0c;目的是理解一个大的数据矩阵&#xff08;测量值&#xff09;。对于 n n n 个样本&#xff0c;我们每个测量 m m m…

anaconda安装使用+pytorch环境配置(cpu)+pycharm环境配置(详细教程)

一、anaconda下载 1.anaconda官网尝试下载&#xff1a; 官网网址&#xff1a;Anaconda | Built to Advance Open Source AI 1.进入官网 2.点击Products->Distribution&#xff0c;跳过注册进入下载页面 3.选择系统下载 2.清华镜像下载 1.网址&#xff1a;Index of /anac…

Unity3D仿星露谷物语开发34之单击Drop项目

1、目标 当在道具栏中选中一个Item时&#xff0c;点击地面就可以实现Item的drop操作&#xff0c;每点击一次就drop一次&#xff0c;直到道具栏中Item数量不够。 这样的好处&#xff1a;避免每次Drop都从道具栏中拖拉Item&#xff0c;通过点击这种操作可以更加高效。 方法&am…

java 正则表达式优化

1&#xff0c;什么是正则表达式 正则表达式使用一些特定的元字符来检索、匹配以及替换符合规则的字符串。 构造正则表达式语法的元字符&#xff0c;由普通字符、标准字符、限定字符&#xff08;量词&#xff09;、定位字符&#xff08;边界字符&#xff09;组成 普通字符 字母[…

检测链表是否有环, 动画演示, Floyd判圈算法扩展应用

力扣原题链接: 141. 环形链表 - 力扣&#xff08;LeetCode&#xff09; 哈希表 检测环形链表, 直观的思路就是使用哈希表, 遍历这个链表, 将访问过的节点加入到哈希表中, 如果遍历过程中发现节点已经存在于哈希表中, 则说明链表有环. 复杂度分析: 时间复杂度: O(N), 最坏情…

linux专题3-----linux上链接远程mysql

要在 Ubuntu 上连接远程 MySQL 数据库&#xff0c;你可以使用 MySQL 客户端工具或者其他数据库管理工具&#xff0c;如 phpMyAdmin 或 MySQL Workbench。以下是使用 MySQL 命令行工具连接远程 MySQL 的步骤&#xff1a; 确保已安装 MySQL 客户端 首先&#xff0c;确保你的 Ub…

webpack js 逆向 --- 个人记录

网站 aHR0cDovL2FlcmZheWluZy5jb20v加密参数 参数加密位置 方法&#xff1a; 1. 构造自执行函数 !function(e) {// 加载器 }(// 模块1&#xff1b;// 模块2 )2. 找到js的加载器 3. 把上述代码放入第一步构造的自执行函数(完整扣取一整个加载器里的代码)&#xff0c;并用一…

用HTML.CSS.JavaScript实现一个贪吃蛇小游戏

目录 一、引言二、实现思路1. HTML 结构2. CSS 样式3. JavaScript 逻辑 三、代码实现四、效果展示 一、引言 贪吃蛇是一款经典的小游戏&#xff0c;曾经风靡一时。今天&#xff0c;我们将使用 HTML、CSS 和 JavaScript 来实现一个简单的贪吃蛇小游戏。通过这个项目&#xff0c…

基于α-β剪枝的含禁手AI五子棋

前言&#xff1a; 正常的五子棋应当设有禁手规则&#xff0c;否则先手黑棋必赢&#xff0c;基于此点设计出一款包含禁手的AI五子棋项目&#xff0c;该项目代码已在github开源&#xff0c;感兴趣的友友可以自取试玩:ace-trump-tech/AI-Gomoku-with-Prohibition-Moves: 含禁手的A…

Spring Boot 集成 Redis中@Cacheable 和 @CachePut 的详细对比,涵盖功能、执行流程、适用场景、参数配置及代码示例

以下是 Cacheable 和 CachePut 的详细对比&#xff0c;涵盖功能、执行流程、适用场景、参数配置及代码示例&#xff1a; 1. 核心对比表格 特性CacheableCachePut作用缓存方法的返回结果&#xff0c;避免重复计算执行方法并更新缓存&#xff0c;不覆盖原有缓存执行流程缓存命中…

可以使用费曼学习法阅读重要的书籍

书本上画了很多线&#xff0c;回头看等于没画出任何重点。 不是所有的触动都是有效的。就像你曾经看过很多好文章&#xff0c;当时被触动得一塌糊涂&#xff0c;还把它们放进了收藏夹&#xff0c;但一段时间之后&#xff0c;你就再也记不起来了。如果让你在一本书上画出令自己…

Nginx之https重定向为http

为了将Nginx中443端口的请求重定向到80端口&#xff0c;你可以按照以下步骤进行操作&#xff1a; ‌确认Nginx已经正确安装并运行‌&#xff1a; 确保Nginx服务已经在你的系统上安装并运行。你可以通过运行以下命令来检查Nginx的状态&#xff08;具体命令可能因操作系统而异&a…

【ARTS】【LeetCode-2873】有序三元组中的最大值!

前言 仅做学习使用&#xff0c;侵删 什么是ARTS&#xff1f; 算法(Algorithm): 每周至少一道LeetCode算法题&#xff0c;加强编程训练和算法学习 阅读(Review)&#xff1a; 阅读并点评至少一篇英文技术文章&#xff0c;提高英文水平 技巧 (Tip)&#xff1a;学习至少一个技…

基于spring boot 鲜花销售系统PPT(源码+lw+部署文档+讲解),源码可白嫖!

课题意义 随着网络不断的普及发展&#xff0c;鲜花销售系统依靠网络技术的支持得到了快速的发展&#xff0c;首先要从用户的实际需求出发&#xff0c;通过了解用户的需求开发出具有针对性的信息管理系统&#xff0c;利用目前网络给用户带来的方便快捷这一特点对系统进行调整&am…

Redis常用的数据结构及其使用场景

字符串(String) string 是 redis 最基本的类型&#xff0c;你可以理解成与 Memcached 一模一样的类型&#xff0c;一个 key 对应一个 value。 string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据&#xff0c;比如jpg图片或者序列化的对象。 string 类型是 R…

设计模式简述(五)建造者模式

建造者模式 描述基本要素协调类使用 描述 建造者模式属于创造型设计模式。 通常用于构建一系列复杂对象&#xff0c;这些对象有一定的共性。 我们可以通过不同的建造者&#xff0c;组装不同的对象 与工厂模式的区别&#xff0c;建造者模式更侧重与基于基础构件组装而非直接创…

Java基础 4.6

1.成员方法练习 //编写类A&#xff1a;判断一个数是奇数还是偶数&#xff0c;返回boolean //根据行、列、字符打印对应行数和列数的字符&#xff0c;比如&#xff1a;行4 列4 字符# 则打印相应的效果 public class MethodExercise01 {public static void main(String[] args) …

前端快速入门学习4——CSS盒子模型、浮动、定位

一、盒子模型 所有HTML元素可以看作盒子&#xff0c;在CSS中&#xff0c;"box model"这一术语是用来设计和布局时使用。 CSS盒模型本质上是一个盒子&#xff0c;封装周围的HTML元素&#xff0c;它包括&#xff1a;边距&#xff0c;边框&#xff0c;填充&#xff0c…

瑞数信息发布《BOTS自动化威胁报告》,揭示AI时代网络安全新挑战

近日&#xff0c;瑞数信息正式发布《BOTS自动化威胁报告》&#xff0c;力求通过全景式观察和安全威胁的深度分析&#xff0c;为企业在AI时代下抵御自动化攻击提供安全防护策略&#xff0c;从而降低网络安全事件带来的影响&#xff0c;进一步增强业务韧性和可持续性。 威胁一&am…

Docker设置代理

目录 前言创建代理文件重载守护进程并重启Docker检查代理验证 前言 拉取flowable/flowable-ui失败&#xff0c;用DaoCloud源也没拉下来&#xff0c;不知道是不是没同步。索性想用代理拉镜像。在此记录一下。 创建代理文件 创建docker代理配置 sudo mkdir -p /etc/systemd/s…