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

个人主页:仍有未知等待探索-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.xdnf.cn/news/1488964.html

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

相关文章

Windows版本免费PyMol的安装

技术背景 在前面一篇博客中,我们介绍过在Linux平台下安装和使用免费版本的PyMol。其实同样的这个免费版在Windows平台上(这里以win11为例)也是支持的。 安装流程 这个免费版本的PyMol依赖于Conda,因此首先需要访问conda官网下载一个miniconda到本地进行安…

鸿蒙UI系统组件10——菜单(Menu)

果你也对鸿蒙开发感兴趣,加入“Harmony自习室”吧!扫描下面名片,关注公众号。 Menu是菜单接口,一般用于鼠标右键弹窗、点击弹窗等。 1、创建默认样式的菜单 菜单需要调用bindMenu接口来实现。bindMenu响应绑定组件的点击事件&am…

【权威发布】第二届机械电子工程与软件工程国际会议(MEESE 2024)

第二届机械电子工程与软件工程国际会议 2024 International Conference on Mechanical and Electronic Engineering and Software Engineering 【1】会议简介 第二届机械电子工程与软件工程国际会议是一个专注于机械电子工程与软件工程领域交叉融合的国际盛会。会议旨在汇聚全球…

充满惊喜与欢乐的老友

在这个充满惊喜与欢笑的娱乐圈里,每一个不经意的可能成为网友热议的焦点,而《快乐老友记》的花絮,无疑为这个多彩的世界又添上了一抹亮丽的色彩。当“王栎鑫被路人认成张艺兴”这一话题如春风般拂过网络,不仅让两位才华横溢的艺人…

concrt140.dll丢失是什么情况?有效的解决dll!

concrt140.dll文件丢失是电脑中少见的文件,但也会因为某些原因会导致电脑丢失concrt140.dll文件,那么出现这文件的原因是什么呢?出现这样的问题有什么办法可以将concrt140.dll修复呢?一起来看看吧。 为什么会缺失concrt140.dll文件…

Java企业微信服务商代开发获取AccessToken示例

这里主要针对的是企业微信服务商代开发模式 文档地址 可以看到里面大致有三种token,一个是服务商的token,一个是企业授权token,还有一个是应用的token 这里面主要有下面几个参数 首先是服务商的 corpid 和 provider_secret ,这个可…

多域DNS服务器搭建

搭建dns服务器,可以同时解析多个域名 www.yuanyu.zhang 10.1.1.10 bbs.yuanyu.zm co.yuanyu.cc vim /etc/named.rfc1912.zones 58 zone "yuanyu.zm" IN { 59 type master; 60 file "yuanyu.zm.zone"; 61 all…

Java基础入门14:常用API(Object(s)类、包装类、Math、Arrays、日期时间、Lambda表达式、方法引用)

Object类 Object类是Java中所有类的祖宗类,因此,Java中所有类的对象都可以直接使用Object类中提供的一些方法。 Object类的常见方法: package com.itchinajie.d12_api_object;public class Test {public static void main(String[] args) {…

bgp 简单认证功能

原理概述 路由协议通常分为内部网关协议(IGP: Interior Gateway Protocol)和外部网关协议(EGP: Exterior Gateway Protocol)两大类。一般来讲,IGP用于自治系统AS(AutonomousSystem)内部,EGP用于AS之间。最早的IGP是一种称为GGP (G…

【iOS】——通知机制及底层原理

通知传值概要 通知传值可以跨越多个界面进行传值,一般用于后一个界面向前一个界面传值。 通知传值支持多个接收者,多个对象可以同时接收同一个通知并进行处理。这样可以实现一对多的通信,方便跨多个对象进行值传递。 使用步骤 1.在发送者中…

微前端--qiankun

qiankun qiankun分为accpication和parcel模式。 aplication模式基于路由工作,将应用分为两类,基座应用和子应用,基座应用维护路由注册表,根据路由的变化来切换子应用。子应用是一个独立的应用,需要提供生命周期方法供…

【NPU 系列专栏 4 -- 高带宽内存 HBM3 详细介绍】

请阅读【嵌入式及芯片开发学必备专栏】 文章目录 高带宽内存 (HBM3) 简介高带宽低功耗高容量紧凑的封装 HBM3 应用场景深度学习与人工智能高性能计算 (HPC)数据分析与大数据处理图形处理与游戏 HBM3 应用举例英伟达 H100 GPUAMD MI200 系列 GPUSummary 高带宽内存 (HBM3) 简介 …

有什么好用的AI工具推荐吗?

AI视频生成:小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/ 所有打工人集合!根据你问题中的描述,本小白正好都有涉及过相关领域的AI工具。 今天一次性讲清能处理所有办公场景的AI工具…

HarmonyOs之 路由简单跳转

Navigation路由相关的操作都是基于页面栈NavPathStack提供的方法进行,每个Navigation都需要创建并传入一个NavPathStack对象,用于管理页面。主要涉及页面跳转、页面返回、页面替换、页面删除、参数获取、路由拦截等功能。 Entry Component struct Index …

2024最新 Navicat Premium 17.0.12简体中文版破解激活永久使用(保姆级教程)

2024最新 Navicat Premium 17.0.12 简体中文版破解激活永久使用(保姆级教程) 一、Navicat Premium 17下载二、Navicat Premium 17安装三、激活永久使用 一、Navicat Premium 17下载 官网-安装包 官网地址:https://www.navicat.com.cn/downlo…

永磁同步电机无速度算法--非线性磁链观测器

非线性磁链观测器顾名思义观测器的状态变量为磁链值,观测的磁链值收敛于电机实际磁链值,观测器收敛。非线性是由于观测器存在sin和cos项,所以是非线性观测器 一、原理介绍 表贴式永磁同步电机αβ轴电压方程: 将公式变换 定义状态变量X: 定…

Java学习笔记(六)面向对象编程(基础部分)

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍Java面向对象编程(基础部分)类与对象、方法重载、作用域、构造器细节、this关键字、可变参数使用以及部分理论知识 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟&#x1…

零食商城管理系统

目录 一、项目背景与目标 1.1 项目背景 1.2 项目意义 1.3 国内外研究现状 1.4 开发工具介绍 二、项目内容与分工 三、 时间表与进度 1. 需求分析阶段: 2. 系统设计阶段: 3. 系统开发阶段: 4. 系统测试阶段: 5. 部署与上…

python项目通过docker部署到Linux系统并实现远程访问

背景需求:在Windows系统编写了简单的python代码,希望能通过docker打包到Linux Ubuntu系统中,并运行起来,并且希望在本地Windows系统中能通过postman访问。 目录 一、原本的python代码 二、创建一个简单的Flask应用程序 三、创…

虚拟机centos9搭建wordpress

目录 1. 更换yum源更新系统软件包: 1.1备份yum源 1.1.1创建备份目录: 1.1.2移动现有仓库配置文件到备份目录: 1.1.3验证备份: 1.2更换yum源 1.2.1添加yum源 1.2.2删除和建立yum缓存 1.3更新系统软件包 1.4 yum与dnf介绍…