【1++的Linux】之进程(一)

news2024/10/6 23:01:02

👍作者主页:进击的1++
🤩 专栏链接:【1++的Linux】

文章目录

  • 一,冯诺依曼与操作系统概念
    • 1.1 冯诺依曼体系结构
    • 1.2 操作系统
  • 二,进程的基本概念

一,冯诺依曼与操作系统概念

1.1 冯诺依曼体系结构

在这里插入图片描述
如图所示,就是冯诺依曼体系结构,它由输入输出设备;存储器;中央处理器组成。
其中,我们常见的输入设备有:键盘,鼠标,扫描仪,网卡等。
常见的输出设备有:显示器,网卡。中央处理器(CPU):包括运算器:算数运算,逻辑运算;控制器:控制协调。

**要注意的是:**CPU读取数据都要到内存中去读,站在数据角度,CPU不和输入设备直接打交道。对于要输出数据,也是得通过内存,因此也可以认为,外设只和内存打交道。总结就是,程序要运行,必须被加载到内存中,所有设备都直接和内存打交道。
对于不同存储设备的读取速度,我们也做如下总结:
CPU&&寄存器>内存>磁盘>光盘>磁带。

1.2 操作系统

  1. 什么是操作系统?
    对于任何计算机系统都包含一个基本的程序集合,称为操作系统。操作系统包括:内核与其他程序(shell等)。
  2. 操作系统的作用?
    与硬件交互,管理好软硬件资源,从而为用户提供一个好的环境。因此也可以称其为一款”搞管理“的软件。
  3. 操作系统是如何进行管理的?
    我们以一个学校的简化版为例。
    我们有角色:校长(管理者),辅导员(驱动程序),学生(被管理对象,硬件)。校长不一定要直接去管理学生,而是通过辅导员而去间接的进行管理。那么校长靠什么去做相应的决策呢?最方便,高效的就是通过辅导员拿到学生的数据,从而进行管理,也就是说,管理者管理的是被管理者的数据。那么由于学生太多,产生的数据也过多,因此为了方便管理,我们要对学生进行描述,根据描述类型,定义为对象,这类似于我们C语言中的struct结构体,为了管理,我们还需将这么多对象用数据结构将其组织起来,方面我们的增删查改。
    这就是操作系统进行管理的原理。
    总结就是:先描述,后组织!

在这里插入图片描述

二,进程的基本概念

什么叫进程呢?🤔🤔🤔
正在执行的程序或者可以说是担当分配系统资源的实体。
在第一小节我们说过,操作系统进行管理的手段是:先描述后组织。对于进程的管理也是这样的,先对进程进行描述,然后将其信息放在一个叫做进程控制模块的数据结构中。我们称之为PCB,在Linux中,叫做
task_struct。

task_struct是Linux内核的一种数据结构,它会被装载到内存里并且包含着进程的信息。
所有运行在系统里的进程都以task_struct链表的形式存在内核里。

task_struct中有什么?

  1. 标示符: 描述本进程的唯一标示符,用来区别其他进程。
  2. 状态: 任务状态,退出代码,退出信号等。
  3. 优先级: 相对于其他进程的优先级。
  4. 程序计数器: 程序中即将被执行的下一条指令的地址。
  5. 内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
  6. 上下文数据: 进程执行时处理器的寄存器中的数据。
  7. I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
  8. 记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
  9. 其他信息

除了操作系统创建的第一个进程外,所有进程都有其父进程。不一定有子进程。下面来讲一讲如何创建一个进程。
在创建进程前我们先来学习如何查看进程。
命令ps -选项 就能够查看进程,具体如下。
“-j” 选项表示以详细的格式显示进程信息
“-a” 选项表示显示所有用户的进程
“-x” 选项表示显示没有控制终端的进程
-w 显示加宽可以显示较多的资讯
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的进程
演示如下:
在这里插入图片描述
在这里插入图片描述

接下来我们对这段命令进行剖析:ps aux | head -1 是将其头部份显式出来;&&是与的意思,只有第一条命令执行完了,才能执行第二条命令;ps aux | grep test3是将test3中的所有进程显式出来;grep -v grep由于grep命令本身在执行时也是进程,所以这段命令是不限grep进程。

讲了如何查看进程,接下来我们学习如何创建进程。
通过系统调用函数fork()来创建进程。
和我们平常所认识到的不一样的是,fork()有两个返回值,其代码是父子共享的,但其会各自开辟空间。
先演示,用结果说话!😲😲😲

在这里插入图片描述

在这里插入图片描述

或许大家会有疑问,为什么会有两个返回值?
在这里插入图片描述
在fork()后,会产生两个执行流,并且这两个执行流的执行先后顺序是不确定的,谁先才运行队列就谁先执行。因此看似有两个返回值,其实是同一份代码,被执行了两次,并且返回值不同罢了。
这时操作系统就会讲这个新产生的task_struct链接到其链表中。因此,我们可以推出,进程的调度就成了在task_struct链表中选择一个进程。
在这里插入图片描述

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

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

相关文章

如何关闭网页版【知乎】等页面的登录弹窗(以谷歌浏览器为例)

如何关闭网页版【知乎】等页面的登录弹窗(以谷歌浏览器为例) 在不登陆知乎的情况下仍然可以正常浏览页面,可是每次打开新页面会重复出现弹窗要求用户登录。如何屏蔽掉这一弹窗呢? 在浏览器中把知乎网址设置为禁止使用javascript 在chrome的…

C#盯盘小工具,“监”

也是一个小工具,用来看大A股票和主要指数行情的。 如果你是一个上班族,同时你也是一颗小韭菜,a股在开市交易盘中时刻惦记着股票是涨了还是跌了,却不能时刻盯着手机看行情,也不能在电脑上开着同花顺来回切窗口&#xff…

4.CSS(一)

目录 一、CSS简介 二、CSS基础选择器 (一)标签选择器 (二)类选择器 类选择器-多类名 (三)id选择器 (四)通配符选择器 (五)总结 三、CSS字体属性 &…

Acwing.906 区间分组(贪心)

题目 给定N个闭区间[ai,bi],请你将这些区间分成若千组,使得每组内部的区间两两之间(包括端点)没有交集,并使得组数尽可能小。 输出最小组数。 输入格式 第一行包含整数N,表示区间数。 接下来N行,每行包含两个整数ai…

【算法基础】2.2 字典树/前缀树 Trie

文章目录 知识点cpp结构体模板 模板例题835. Trie字符串统计❤️❤️❤️❤️❤️143. 最大异或对😭😭😭😭😭(Trie树的应用) 相关题目练习208. 实现 Trie (前缀树)1804. 实现 Trie (…

轮转数组——左旋数组,右旋数组

题目链接:力扣 左旋转字符串:【1234567】—左旋3下—>【4567123】 反转区间为前n的子串【3214567】反转区间为n到末尾的子串【3217654】反转整个字符串【4567123】 右旋转字符串:【1234567】—右旋3下—>【5671234】 反转整个字符…

一图看懂 pandas 模块(1):提供高性能、易用的数据结构和数据分析工具,资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创,转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 pandas 模块:提供高性能、易用的数据结构和数据分析工具,资料整理笔记(大全) 🧊摘要🧊模块图&#x…

SAP-MM-物料版次

业务背景介绍 UF公司其产成品会根据客户需求进行细节上零件变更,每次都需新增物料主数据以及搭建新的BOM和对应的工艺路线进行数据处理(即对客户A0001的产成品从A0010到B0010的变化,但物料描述还是原来的描述) 新增物料编号进行库存管控是较为合理的需求,但是因UF销售业务员…

在LLM的支持下使游戏NPC具有记忆化的方法

问题 使用GPT这样的LLM去处理游戏中的NPC和玩家的对话是个很好的点子,那么如何处理记忆化的问题呢。 因为LLM的输入tokens是有限制的,所以伴随着问题的记忆context是有窗口大小限制的,将所有的记忆输入LLM并不现实。 所以这里看到了stanfo…

Damiler EDI 项目 Excel 方案开源介绍

准备下载和运行 Daimler EDI 到 Excel 使用 Excel 生成一系列 EDI 文档与 Daimler 通信。 下载工作流 下载示例文件 Daimler EDI & Excel 方案简介 本文将继续分享Daimler示例工作流:使用Excel端口和Email端口生成一系列文件,完成与Daimler的…

解锁编程世界的魔法密码:探索算法的奥秘与应用

一个程序员一生中可能会邂逅各种各样的算法,但总有那么几种,是作为一个程序员一定会遇见且大概率需要掌握的算法。今天就来聊聊这些十分重要的“必抓!”算法吧~* 一:引言 算法是解决问题和优化程序性能的核心,它是一…

Redis实战案例20-优化秒杀(一人一单)

查询优惠券判断秒杀库存;查询订单;校验一人一单;减库存、创建订单; 以上均为串行操作,执行效率不高,在高并发的场景下性能很一般 问题引出:如何在Redis中完成秒杀判断和校验一人一单的问题&…

【LeetCode热题100】打卡第39天:数组中第K个最大元素最大正方形

文章目录 【LeetCode热题100】打卡第39天:数组中第K个最大元素&最大正方形⛅前言 数组中的第K个最大元素🔒题目🔑题解 最大正方形🔒题目🔑题解 【LeetCode热题100】打卡第39天:数组中第K个最大元素&…

若依(Ruoyi)前后端分离版项目部署到服务器(Linux环境)后,刷新页面报错:404 Not Found

原文章:若依(ruoyi)前后端分离版使用教程之若依后端部署阿里云服务器步骤(超详细)_蓝多多的小仓库的博客-CSDN博客 问题: 在若依项目部署服务器后,可以正常运行,但如果执行刷新页面操作,便会出现404 Not Found。 原因: Nginx未正确配置。由于后台路由采用History模式…

软件测试银行项目面试过程

今天参加了一场比较正式的面试,汇丰银行的视频面试。在这里把面试的流程记录一下,结果还不确定,但是面试也是自我学习和成长的过程,所以记录下来大家也可以互相探讨一下。 请你做一下自我介绍?(汇丰要求英…

【JAVA】为char所提供包装类——Character类

个人主页:【😊个人主页】 系列专栏:【❤️初识JAVA】 文章目录 前言Character 类装箱(boxing)拆箱(unboxing)转义序列Java的转义序列实例Character 方法isDigit()isLetter()isWhitespace()toUpperCase()toLowerCase()compareTo()isAlphabetic…

《线程池的执行流程》

目录 什么是线程池 线程池的优点 线程池的执行流程 线程池的状态 什么是线程池 线程池是一种多线程处理形式,内部维护了若干个线程。 没有线程任务的时候,线程都处于空闲状态。如果有新的线程任务,就分配给空闲线程执行。如果所有线程都…

【算法与数据结构】144、145、94LeetCode二叉树的前中后遍历(递归法、迭代法)

文章目录 一、题目二、递归算法三、迭代算法四、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、递归算法 思路分析:这道题比较简单,不多说了,大家直接看代码就行。注意前中后…

家具商城小程序:连接优质家居产品的桥梁

随着人们对家居生活品质的追求,家具商城小程序成为提供便捷购物和个性化服务的不可或缺的工具,通过家具商城小程序,用户可以浏览并购买各类家具产品,如沙发、床、桌子等。同时,家具商城小程序还提供个性化的推荐、客户…

【实战篇】docker-compose部署go项目

一、场景: 二、需求 三、实操 Stage 1:GoLand 中 build 生成二进制文件 Stage 2:编写 Dockerfile Stage 3:编写 docker-compose.yaml Stage 4:文件上传到 ubuntu 服务器上 Stage 5:运行 docker-comp…