Linux——操作系统与进程基本概念

news2024/11/30 0:52:48

Linux——操作系统与进程基本概念


文章目录

  • Linux——操作系统与进程基本概念
  • 一、冯诺依曼体系结构
  • 二、操作系统
    • 2.1 OS层次图
    • 2.2 操作系统的作用
    • 2.3 管理的理解
  • 三、进程
    • 3.1 进程的概念
    • 3.2 描述进程—PCB
    • 3.3 PCB的内容
      • 3.3.1 查看进程
      • 3.3.2 标识符
      • 3.3.3 状态
      • 3.3.4 程序计数器
      • 3.3.5 记账信息
      • 3.3.6 上下文信息


一、冯诺依曼体系结构

在这里插入图片描述

输入设备: 键盘、磁盘、网卡、显卡、写字板、摄像头等
输出设备: 显示器、磁盘、网卡、显卡等
存储器: 内存
运算器和控制器: CPU

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

冯诺依曼体系结构是现代计算机主要使用的体系结构
在计算机的发展历史上,对于计算机的构造,其实出现过很多不同的构造,例如哈佛结构,图灵结构,但计算机发展至今,冯诺依曼体系结构却是现代计算机主要使用的结构

理由:首先我们需要知道现代计算机cpu的算力速度是非常恐怖的,而对于硬件来讲, cpu的读写速度大于内存而内存大于磁盘,但在计算机发展的初期,由于科学技术受限,cpu 内存 磁盘 三者之间的速度差别可能不大,
所以存在cpu与磁盘等外设相连,cpu直接读写到磁盘中的情况,但随着科学技术的发展,cpu的读写速度呈指数级上升,cpu的读写速度远大于磁盘的读写速度,根据木桶原理我们可以知道如果cpu直接与磁盘进行数据交换的话属于是暴殄天物了,磁盘会限制计算机的算力,所以大部分的计算机体系结构都被淘汰了,而正是因为冯诺依曼体系结构的合理性,使其没被淘汰

现代计算机以CPU为中心,距离cpu越近,存储效率越高,造价越贵
如果全部用高价格,一定带来的就是计算机太贵了
如果我们全部用便宜的存储介质,计算机价格便宜,但是基本用不了

二、操作系统

首先需要知道的常识是,操作系统其实也是软件(而且是第一个运行起来的软件),也是需要被加载到内存运行的,只有变成一个进程,也就是被执行了,运行起来了操作系统才真正起作用了
这里提到了进程的概念,本文中会提到,此处只需要知道操作系统也是软件也需要被执行起来才有作用

2.1 OS层次图

在这里插入图片描述

2.2 操作系统的作用

早期的计算机,由于技术不够成熟,使用的人大部分都是科研人员,是妥妥的程序员,但设计计算机的初衷本质是为了让人们在各行各业都能使用获得便利,所以对于一个小白来讲,也要能使用上计算机,也就是上图中的用户
如果没有操作系统,我们就要和一堆的硬件直接接触,需要了解各种硬件的特性,使用成本太高
由此就有了操作系统:

像这种任何计算机包含的一种最基本的能够进行软硬交互的一款软件,我们把它叫做操作系统(英文缩写OS)

OS包括:

内核:进程管理,内存管理,文件管理,驱动管理:这是OS用于管理硬件的
其它程序:函数库,shell程序等,这些程序能帮助用户更方便的使用OS

操作系统是什么?
是一款专门针对软硬件资源管理工作的软件

操作系统的功能:
对下管理好软硬件资源
对上为用户提供稳定、高效、安全的运行环境

那OS怎么对用户提供各种功能?

首先要知道OS不信任任何用户,所以我们也只能通过接口来与OS打交道,也就是OS层次图中的系统调用接口

系统调用与库函数的区别

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

2.3 管理的理解

既然是管理,那么就有管理者和被管理者

我们可以想象在学校中,校长就是管理者,但是我们从来没见过校长
管理者和被管理者不直接接触,管理者的决策交给执行者(老师、辅导员),通过他们管理被管理者(学生)

按照上面OS的层次图,OS就是校长,驱动程序就是辅导员,底层硬件就是我们学生

通过例子我们可以得出以下的结论:

① 管理者和被管理者并不直接打交道
② 如何对被管理者进行管理? 先进行一些决策,再把这些决策施行

而管理者的决策需要有依据,依据就是数据

而我们的数据怎么被管理者知道呢?
如果一个学校人很少,校长有可能能知道每个人的数据,但是如果人很多呢?该如何聚合这些数据呢?

这就用到了C语言中的结构体,C++中的类

我们将学生具有的属性定义成结构体或类的过程,通常叫做数据的描述
有了结构体或类,那么就可以将数据存放在容器中,数组也好,链表也好,可以进行增删查改,也就是管理数据,把这个过程叫做数据的组织

由此我们得出重要结论:
管理的本质不是管理人,而是管理数据
计算机执行管理时,先把管理对象描述起来,再把管理对象组织起来
先描述 再组织

以上讲的都是对硬件的管理,那么对软件呢?对于软件的管理也是一样,先描述 再组织!

三、进程

3.1 进程的概念

进程 = 可执行程序 + 内核数据结构(PCB)

Windows中任务管理器下的程序就叫进程
Windows中当我们想运行一个软件的时候,会双击一个.exe后缀的文件,这个文件就是可执行程序
上面我们说过操作系统的本质是管理,而管理是先描述 再组织

当想要创建一个进程的时候,要先将可执行程序加载到内存,随后操作系统对其建立对应的PCB(进程控制块)

在这里插入图片描述

3.2 描述进程—PCB

进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合
课本上称之为PCB(process control block),Linux操作系统下的PCB是: task_struct

task_ struct内容分类

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

3.3 PCB的内容

3.3.1 查看进程

由于要查看一个进程,要保证进程一直在运行,这里写一个死循环
在这里插入图片描述
查看进程指令

ps axj | grep “mytest”
ps -l 查看运行中进程的详细信息

在这里插入图片描述
另一种查看进程的方法

ls /proc

proc是linux默认查看进程的目录,而我们创建的的进程的信息也会在proc中创建一个目录
在这里插入图片描述
修改程序获得程序的pid ,找到对应的目录(pid下文中会提到)
在这里插入图片描述
查看该目录下内容
在这里插入图片描述

3.3.2 标识符

查看进程的标识符

getpid()

身份证可以说是人的标识符,而进程也有一个属于自己标识符pid

3.3.3 状态

退出信号:我们写的程序末尾会有个return 0,0就是退出码
退出码用于检测程序是正常结束还是异常结束

查看最近一次的退出码

echo $?

3.3.4 程序计数器

也就是pc指针,永远指向下一条指令的地址

3.3.5 记账信息

OS有一个调度模块,可以较为均匀的调度每个进程,因为进程要获得CPU的资源才能进行,而进程又有很多,他会记录每个进程所使用的时间总和以确保“公平”

3.3.6 上下文信息

在这里插入图片描述
假设上述四个进程正在运行
为了保证公平,操作系统规定了进程单次运行的时间片(单次运行的最长时间),我们以为的CPU在同时运行多个进程,其实是CPU的快速切换完成的,在一个时间片运行一个进程,到了时间就切换下一个

假设我现在执行PCB1,一个时间片到了之后需要转换成PCB2,但PCB1进程很可能没执行完,而进程运行会产生大量的临时数据

这样就会引出一个问题
当1运行完一次时间片后这些临时数据下次还要用,如果不管,2就会覆盖掉1的临时数据

所以我们需要保护上下文信息和恢复上下文信息,当PCB1运行完一个时间片时,PCB1带走自己的临时数据,PCB回来的时候,再把临时数据给寄存器,接着上次运行

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

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

相关文章

react中关于类式组件和函数组件对props、state、ref的使用

文章中有很多蓝色字体为扩展链接&#xff0c;可以补充查看。 常用命令使用规则 组件编写方式: 1.函数式 function MyButton() { //直接return 标签体return (<>……</>); }2.类 class MyButton extends React.Component { //在render方法中&#xff0c;return…

matlab关于COE文件之读取操作

平台&#xff1a;matlab2021b 场景&#xff1a;在使用fir滤波器后&#xff0c;我们使用matlab生成coe文件后。在xilinx新建IP的后&#xff0c;数据流经过FIR的IP核后数据位宽变宽。这时候我们需要对数据进行截位。这时候需要读取coe文件求和后&#xff0c;计算我们需要截位的位…

Postman之版本信息查看

Postman之版本信息查看 一、为何需要查看版本信息&#xff1f;二、查看Postman的版本信息的步骤 一、为何需要查看版本信息&#xff1f; 不同的版本之间可能存在功能和界面的差异。 二、查看Postman的版本信息的步骤 1、打开 Postman 2、打开设置项 点击页面右上角的 “Set…

数据加密、文档加密为什么都选择安企神软件

数据加密、文档加密为什么都选择安企神软件 免费试用安企神 在数据加密和文件加密领域&#xff0c;有众多优秀的软件&#xff0c;他们功能各异、价格不同、效果也大相径庭&#xff0c;经过对比使用、用户口碑和技术网站评判&#xff0c;安企神在各方面都稳坐第一把交易。其原…

笔记强训 || NC313 两个数组的交集 || 哈希表/去重+排序+遍历查找+插入ret

题目解析 两个不同整数数组&#xff0c;其中两个数组均是无序且有多个重复项。找到两个数组中的公共元素并返回。此时&#xff0c;需要注意&#xff0c;返回值中并没有重复项&#xff0c;也就是如果数据均一致&#xff0c;返回一个数字即可。 算法原理 思路 就是将一个数组…

【编程TOOL】VC++6.0下载安装配置使用保姆式教程

目录 ​编辑 1.软件介绍 2.软件下载 3.软件安装 3.1.下载得到可执行文件并双击进行安装 3.2. 点击下一步 3.3. 选择安装位置 3.4. 勾选“创建桌面快捷方式”并点击下一步 5. 点击安装并等待 3.6. 先取消运行&#xff0c;后点击完成&#xff0c;软件即安装完毕 4.兼容性配置 4.1…

代码随想录算法训练营DAY28(记录)|C++回溯算法Part.5|491.递增子序列、46.全排列、47.全排列II

文章目录 491.递增子序列思路伪代码CPP代码优化代码 46.全排列思路伪代码CPP代码 47.全排列IICPP代码 491.递增子序列 力扣题目链接 文章链接&#xff1a;491.递增子序列 视频连接&#xff1a;回溯算法精讲&#xff0c;树层去重与树枝去重 | LeetCode&#xff1a;491.递增子序列…

零基础小白,如何入门计算机视觉?

目录 前言 计算机视觉技术学习路线 基础知识 1. 数学基础 2. 编程基础 3. 图像处理基础 基础算法与技术 1. 特征提取与描述符 2. 图像分割与对象检测 3. 三维重建与立体视觉 机器学习与深度学习 1. 机器学习基础 2. 深度学习 高级主题与应用 1. 高级机器学习与深度学习 2. 计算…

2024年MathorCup数模竞赛C题问题一二+部分代码分享

C题持续更新中 问题一问题二代码混合ARIMA-LSTM模型构建完整数据与代码第一问第二问 问题一 问题一要求对未来30天每天及每小时的货量进行预测。首先&#xff0c;利用混合ARIMA-LSTM模型进行时间序列预测。ARIMA模型擅长捕捉线性特征和趋势&#xff0c;而LSTM模型处理非线性关…

[stm32]DMA使用

自动重装和M2M(软件trig)不能一起使用&#xff0c;否则会停不下来 void MyDMA_Init(uint32_t AddrA,uint32_t AddrB,uint16_t Size){RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);DMA_InitTypeDef DMA_InitStructure;DMA_InitStructure.DMA_PeripheralBaseAddrAddrA;//外…

基于SpringBoot+Vue的校园网上店铺的设计与实现(源码+文档+包运行)

一.系统概述 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统校园店铺商品销售信息管理难度大&#xff0c;容错率…

c++取经之路(其六)——类与对象初始化列表,类的隐式转换,explict,static修饰成员

今天我们来讲一些很散的东西&#xff0c;通过这些很散的东西我们可以使我们之前学的东西更加通透&#xff0c;基本上把这些知识搞定&#xff0c;类与对象的知识基本上就差不多掌握了。 初始化列表&#xff1a; 定义&#xff1a;以一个冒号开始&#xff0c;接着是一个以逗号分…

Python景区票务人脸识别系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

Facade 外观

意图 为子系统中的一组接口提供一个一致的界面&#xff0c;Facade模式定义了一个高层接口&#xff0c;这个接口使得这一字系统更加容易使用。 结构 其中&#xff1a; Facade知道哪些子系统负责处理请求&#xff1b;将客户的请求代理给适当的子系统对象。 Subsystem classes…

Ai2024安装包(亲测可用)

目录 一、软件简介 二、软件下载 一、软件简介 Adobe illustrator&#xff0c;常被称为“AI”&#xff0c;是一种应用于出版、多媒体和在线图像的工业标准矢量插画的软件。作为一款非常好的矢量图形处理工具&#xff0c;该软件主要应用于印刷出版、海报书籍排版、专业插画、多…

大数据测试:构建Hadoop和Spark分布式HA运行环境

随着大数据技术的不断发展&#xff0c;Hadoop和Spark已成为处理大规模数据的热门框架。在生产环境中&#xff0c;高可用性&#xff08;HA&#xff09;是至关重要的&#xff0c;以确保数据处理和分析任务不受中断。本文将详细介绍如何构建 Hadoop和Spark分布式HA运行环境&#x…

HarmonyOS开发实例:【任务延时调度】

介绍 本示例使用[ohos.WorkSchedulerExtensionAbility] 、[ohos.net.http]、[ohos.notification] 、[ohos.bundle]、[ohos.fileio] 等接口&#xff0c;实现了设置后台任务、下载更新包 、保存更新包、发送通知 、安装更新包实现升级的功能。 效果预览 使用说明 安装本应用之…

30K上岸,转鸿蒙开发之后直接乱杀!!

互联网太卷了&#xff0c;熬过了2023才发现&#xff0c;2024更难熬&#xff01;只因行业发展多年&#xff0c;人才过度饱和&#xff01;那前端的出路在哪里&#xff1f;我推荐大家学【华为鸿蒙原生应用开发】新兴行业需求大&#xff0c;各大厂都在高薪抢人&#xff0c;然后前端…

数据的表示和运算—2

1.算术逻辑单元(ALU) 输入信号:A和B为要进行计算的两个操作数。(本质上就是高低电频电信号) 输出信号:输出运算结果 控制信号:由控制单元(CU)发出&#xff0c;解析指令的含义&#xff0c;解析完发出控制信号&#xff0c;M表示做什么运算,M1(逻辑运算) M0(算术运算) S0 ~ S3指明…

Vue3从入门到实战:深度掌握组件通信(下部曲)

5.组件通信方式5-$attrs $attrs的概念&#xff1a; 在Vue中&#xff0c;$attrs 是一个特殊的属性&#xff0c;用于访问父组件向子组件传递的非特定属性。它可以让子组件轻松地获取父组件传递的属性&#xff0c;而无需在子组件中显式声明这些属性。 想象一下你有一个父组件和…