Linux冯诺依曼体系、操作系统、进程概念、进程状态、进程切换

news2024/11/28 8:32:33

个人主页:仍有未知等待探索-CSDN博客

专题分栏:Linux

目录

一、冯诺依曼体系结构

二、操作系统

1、概念

2、为什么要有操作系统?

3、理解操作系统

1.管理的本质

2.管理的概念

3.操作系统结构图

4.为什么要有操作系统?

三、进程

1、进程的概念

1.进程的管理

2.进程动态运行

3.进程的task_struct

a.启动

b.进程创建的代码方式

为什么fork的返回值又能大于0又能等于0?

 c.task_struct的内容

 2、进程的状态

1.Linux的进程状态

2.僵尸进程、孤儿进程

孤儿进程为什么会被os认领?

3.进程的阻塞和挂起,运行

一个进程一旦持有cpu,会一直运行到这个进程结束吗?

操作系统如何对硬件进行管理?

3、进程切换


一、冯诺依曼体系结构

输入设备:键盘、鼠标、摄像头、话筒、磁盘、网卡...

输出设备:显示器、声卡、磁盘、网卡...

CPU:运算器、控制器

存储器:内存

  • 数据时要在计算机的体系结构中进行流动的,流动过程中,进行数据的加工处理。从一个设备到另一个设备,本质是一种拷贝!
  • 数据设备间的拷贝效率决定了计算机整机的基本效率
  • 存储:距离CPU越近,效率越高,成本越高。
  • 在硬件数据流动角度,在数据层面:

        1)CPU不和外设直接打交道,CPU只和内存打交道。

        2)外设(输入输出)的数据,不直接给cpu,而是先放入内存中。

  • 程序运行,为什么要加载到内存?

        冯诺依曼体系结构规定这么做!

  • 程序=代码+数据:程序数据都要被cpu访问。
  • 程序没有被加载到内存的时候,在哪里?

        磁盘(外设)二进制文件。

二、操作系统

1、概念

操作系统是一款软件,用来进行软硬件资源管理

广义的概念:操作系统的内核+操作系统的外壳周边程序(给用户提供使用系统的方式)。

狭义的概念:只是操作系统的内核。

2、为什么要有操作系统?

对软硬件资源进行管理(手段),为用户提供一个良好(稳定、安全、高效)的运行环境(目的)

3、理解操作系统

1.管理的本质

管理者 管理 被管理者的本质就是管理被管理者的数据。

2.管理的概念

先描述,再组织

pl:对于校长管理学生。

先描述:学生可以通过一张表来进行记录,这张表上写了学生的各种信息 ---链表(对应存储的数据结构)

再组织:校长管理学生就可以转化为校长管理学生链表,对其进行增删改查。

3.操作系统结构图

  • (系统调用层)用户不能直接对操作系统进行操作,而是通过操作系统提供的系统调用(也就是函数)进行对操作系统的使用,使操作系统处于平稳的状态。
  • (操作接口层)不是所有的程序员都用系统调用。为了普通开发者能更加方便的使用操作系统,在系统调用的基础上又封装了一层用户操作接口(各种标准库、shell、指令等)。
  • (驱动层)因为每个硬件的厂商可能不同,其执行的标准可能不同,导致操作系统不能直接对硬件进行管理。所以每个生产硬件的厂商都必须写自己的驱动程序,使操作系统都能对其进行管理。每个硬件都有自己的驱动程序。 
  • 跨平台性:不管你是什么操作系统(Linux、Windows),都能在其基础上编写各种语言的代码。原因就是他们都封装了自己的标准库。

4.为什么要有操作系统?

以人为本

对上:提供良好(高效,稳定,安全)的运行环境。

对下:进行硬件管理工作。

三、进程

1、进程的概念

进程 = 内核数据结构task_struct(PCB) + 对应的代码和数据。

task_struct(PCB) ,包括进程的所有属性和一个内存指针(指向对应的代码和属性)。

  • 操作系统中,进程可以同时存在很多个!
  • 将可执行程序加载到内存中,这个不是进程,只是进程的代码和数据。
  • 调度运行进程,本质上就是让程序控制块task_struct进行排队。
  • Linux:(指令ps - 查看进程,选项 axj 详细信息)

1.进程的管理

  • 对进程的管理 -> 对链表的增删改查
  • 添加一个进程,就是将磁盘中的可执行程序添加到内存中,然后再进程列表中加入这个进程。
  • 删除一个进程们就是将内存中的可执行程序释放掉,然后删除进程列表中该进程。

2.进程动态运行

进程task_struct在不同的队列中,进程就可以访问不同的资源。

3.进程的task_struct

a.启动
  • ./XXX,本质上就是让系统创建进程并运行。

        我们自己写的代码形成可执行程序 == 系统命令 == 可执行文件、在Linux运行的大部分执行操作,本质上都是运行进程!

  • 每个进程都有唯一标识,叫做进程的pid。
  • 用户不能直接获取进程的pid,需要用系统调用 --- pid_t getpid(void)

        因为进程的pid在内存中的task_struct是属于操作系统内部的内核数据结构。

  • 在Linux中,用户可以用 [ ctrl + c ] 来终止进程。(用户层面)
  • 在Linux中,用户也可以用指令 [ kill -9 pid ] 来杀掉进程。(系统调用)
b.进程创建的代码方式
  • 获取当前进程的父进程的pid --- pid_t getppid(void)
  • 对于同一个进程,每次启动,对应的pid都不一样,这是正常的。
  • 创建进程 --- pid_t fork(void)。

        fork之后,父子数据、代码共享。创建一个进程,本质上是系统中多了一个进程、多了一个内核数据结构task_struct。

  • 父进程的代码和数据来自磁盘;子进程的代码和数据默认情况继承父进程的代码和数据(只有当子进程要修改数据的时候,系统才会进行写时拷贝,拷贝出一份新的代码和数据给子进程
  • fork函数也是系统调用。
  • 进程具有独立性。
为什么fork的返回值又能大于0又能等于0?

理论上,在fork函数内部,在return返回值之前,子进程就已经创建完毕了。return的时候子进程和父进程各自进行返回,所以才看上去是fork返回了两次。

 c.task_struct的内容

  • 进程的 pcb 中会记录自己对应的可执行程序的路径。

  • 每个进程在启动的时候,会记录自己当前在那个路径下启动(进程的当前路径 cwd)

  • chdir:更改进程的cwd(当前路径)

 2、进程的状态

1.Linux的进程状态

task_struct(PCB)中的一个属性:int status;

  • R(running):运行状态。进程可能正在运行,也可能在运行队列里。
  • S(sleeping):休眠状态。(1、进程在等待“资源”就绪 2、可中断睡眠
  • T(stopped):停止状态。让进程暂停,等待进一步唤醒。
  • t(trancing stop):可追踪停止状态。gdb中调试打断点。
  • D(disk sleep):磁盘休眠状态。是Linux系统比较特有的一种Linux状态。深度睡眠,不可被中断状态(进程自己醒来,重启-断点)
  • X(dead):死亡状态。这个状态只是一个返回状态,任务列表中没有该进程。
  • Z(zombie):僵尸状态。子进程退出,但是父进程没有读取到子进程的退出码
while(1)
{
    // 如果这个打印注释掉,进程会显示R状态;否则大部分是S状态。原因是cpu和屏幕外设的刷新速度不一样,cpu完成运算时,屏幕还在等待进行刷新,所以时S状态。
    printf(""); 
}

2.僵尸进程、孤儿进程

僵尸进程:子进程已经运行完毕,然是需要维持自己的退出信息,在自己的进程task_struct会记录自己的退出信息,未来让父进程进行读取,如果没有父进程读取,僵尸进程会一直存在。

孤儿进程:父进程比子进程先退出,子进程就是孤儿进程。孤儿进程一般都是会被1号进程(OS)进行领养的。

孤儿进程为什么会被os认领?

要保证子进程被正常回收,否则会导致内存泄漏。

3.进程的阻塞和挂起,运行

运行:(在cpu上运行)进程在运行队列中,该进程的状态就是R状态。

一个进程一旦持有cpu,会一直运行到这个进程结束吗?

不会,cpu会给予时间片进行轮转调度的。

让多个进程一切换的方式进行调度,在一个时间段内同时得以推进代码,就叫做并发

任何时候都同时又多个进程在真的同时运行,我们叫做并行

阻塞态(S、D状态):等待键盘资源是否就绪,键盘上篇有没有被用户按下的按键,按键数据交给进程。

操作系统如何对硬件进行管理

对硬件的数据进行管理的。(先描述,再组织!!!)

  • 进程本身就是软件。
  • 不是只有cpu才有等待队列,各种设备都有自己的等待队列。
  • 阻塞和运行的状态变化,往往伴随着pcb被连入不同的队列中!入队列的不是进程的什么代码和数据,而是进程的task_struct。

挂起态:在磁盘中有一个swap分区,当OS内存吃紧的时候,将处于阻塞状态的进程的代码和数据放入swap分区中(唤出)。

用效率换取空间

3、进程切换

  • cpu的寄存器会保存进程的临时数据。
  • cpu内部所有的寄存器中的临时数据,叫做进程的上下文
  • 进程在切换,最重要的一件事是:上下文数据的保护和恢复
  • cpu内的寄存器:寄存器本身是硬件,具有数据的存储能力,cpu的寄存器硬件只有一套
  • cpu内部的数据可以有多套,有几个进程,就有几套和进程对应的数据。
  • 寄存器 != 寄存器的内容

谢谢大家!!!

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

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

相关文章

【计算机网络】ICMP报文实验

一:实验目的 1:掌握ICMP报文的各种类型及其代码。 2:掌握ICMP报文的格式。 3:深入理解TTL的含义(Time to Live,生存时间)。 二:实验仪器设备及软件 硬件:RCMS-C服务器…

ocrbench:on the hidden mystery of ocr in large multimodel models

【多模态】29、OCRBench | 为大型多模态模型提供一个 OCR 任务测评基准-CSDN博客文章浏览阅读1.9k次,点赞26次,收藏22次。本文主要介绍 OCRBench_ocrbenchhttps://blog.csdn.net/jiaoyangwm/article/details/138414709OpenCompass司南 - 评测榜单评测榜单旨在为大语言模型和多…

LINUX 孤儿进程和僵尸进程

1、孤儿进 一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作 为了释放子进程的占用的系统资源: 进程结束之后&#xf…

CAPL通过回调函数applILTxPending模拟E2E失败

文章目录 问题解决办法之前的文章 CANoe CAPL通过回调函数applILTxPending实现E2E模拟发送 问题 问题:在使用CANoeIL仿真模拟E2E报文时,在一台电脑可以仿真成功,同样的工程复制到另外一台电脑就不行了,E2E不计算,这是因为什么? 两台机柜用的都是15版本,模拟失败的是从…

C++ //练习 15.30 编写你自己的Basket类,用它计算上一个练习中交易记录的总价格。

C Primer(第5版) 练习 15.30 练习 15.30 编写你自己的Basket类,用它计算上一个练习中交易记录的总价格。 环境:Linux Ubuntu(云服务器) 工具:vim 代码块: /********************…

昇思25天学习打卡营第24天|基于MindSpore的红酒分类实验

相关知识 KNN k临近算法K nearest neighbor,用于分类和回归。主要思想为,训练一个样本和所有训练样本之间的举例,找到和这个样本最接近的k个样本,根据这k个样本的类别进行投票,票数最高的类就是分类的结果。模型效果…

全网最最实用--模型高效推理:量化基础

文章目录 一、量化基础--计算机中数的表示1. 原码(Sign-Magnitude)2. 反码(Ones Complement)3. 补码(Twos Complement)4. 浮点数(Floating Point)a.常用的浮点数标准--IEEE 754(FP32…

力扣 459重复的子字符串

思路: KMP算法的核心是求next数组 next数组代表的是当前字符串最大前后缀的长度 而求重复的子字符串就是求字符串的最大前缀与最大后缀之间的子字符串 如果这个子字符串是字符串长度的约数,则true /** lc appleetcode.cn id459 langcpp** [459] 重复…

LangChain 一 hello LLM

本来想先写LangChain系列的,但是最近被AutoGen、LlamaIndex给吸引了。2023就要过去了,TIOBE数据编程语言排名Python都第一了,可见今年AI开发之热。好吧,一边学习业界通用的LangChain框架,一边准备跨年吧。 前言 先是O…

基于FPGA的YOLOV5s神经网络硬件部署

一 YOLOV5s 本设计以YOLOV5s部署于FPGA上为例进行分析概述。YOLOV5s网络主要包括backbone、neck、head三部分。 涉及的关键算子: Conv:卷积,包括3*3、1*1,stride1/2Concat:Upsample:Pooling:ADD 二 评估 …

oncoPredict:根据细胞系筛选数据预测体内或癌症患者药物反应和生物标志物

在14年的时候,oncoPredict函数的开发团队在Genome Biology上发了一篇文章。 这篇文章的核心目的是阐释了使用治疗前基线肿瘤基因表达数据去预测患者化疗反应。开发团队发现使用细胞系去预测临床样本的药物反应是可行的。 鉴于之前的理论,该研究团队首先…

docker Docs相关使用文档链接

Docker Docshttps://docs.docker.com/ docker compose | Docker Docshttps://docs.docker.com/reference/cli/docker/compose/docker | Docker Docshttps://docs.docker.com/reference/cli/docker/

【计算机网络】静态路由实验

一:实验目的 1:掌握通过静态路由方法实现网络的连通性。 二:实验仪器设备及软件 硬件:RCMS-C服务器、网线、Windows 2019/2003操作系统的计算机等。 软件:记事本、WireShark、Chrome浏览器等。 三:实验方…

linux集群架构--高可用--keepalived(13985字详解)

linux架构高可用 a.概述 高可用:HA HighAvailablity —>Keepalived生成VIP,DNS解析到这个IP地址即可 b.原理 keepalived 是基于VRRP协议实现高可用VRRP虚拟路由器冗余协议,最开始是给网络设备实现高可用,目前keepalive实现v…

企业公户验证API如何使用JAVA、Python、PHP语言进行应用

在纷繁复杂的金融与商业领域,确保每笔交易的安全与合规是至关重要的。而企业公户验证API,正是这样一位默默守护的数字卫士,它通过智能化的手段,简化了企业对公账户验证流程,让繁琐的审核变得快捷且可靠。 什么是企业公…

NLP-使用Word2vec实现文本分类

Word2Vec模型通过学习大量文本数据,将每个单词表示为一个连续的向量,这些向量可以捕捉单词之间的语义和句法关系。本文做文本分类是结合Word2Vec文本内容text,预测其文本标签label。以下使用mock商品数据的代码实现过程过下: 1、…

关闭Xshell后,任务将结束-tmux

Xshell标签中的会话结束后,会话中运行的进程也将被结束。 关闭标签 解释: xshell在断开连接后会中止所有正在运行的进程和任务,因为xshell客户端是通过ssh协议连接到远程服务器的,一旦连接断开,所有与该会话相关的进程…

数据结构 - 红黑树

文章目录 前言一、红黑树介绍1、红黑树的概念2、红黑树的性质 二、实现红黑树1、基本框架2、插入3、删除4、查找5、测试红黑树6、红黑树代码 三、红黑树性能四、AVL树和红黑树的差别 前言 红黑树是一种二叉搜索树,所以学习前需要学会基本的二叉搜索树,并…

超越源自内省:《自卑与超越》

作者主页: 🔗进朱者赤的博客 精选专栏:🔗经典算法 作者简介:阿里非典型程序员一枚 ,记录在大厂的打怪升级之路。 一起学习Java、大数据、数据结构算法(公众号同名) ❤️觉得文章还…

JS 改造数组对象,将其不确定的key作为value,并合并相同key的value值

const data [{"苹果": 3839,"小米": 1423,"华为": 4965,"oppo": 3334,"vivo": 2820,"一加": 4751},{"苹果": 3560,"小米": 2099,"华为": 3192,"oppo": 4210,"vivo…