操作系统OS--进程

news2024/12/23 22:30:51

目录

操作系统是什么

进程

进程的状态   

1.并行和并发

2.时间片

进程优先级

进程切换

task_struct内容分类:


操作系统是什么

操作系统本质上是一款纯正的“搞管理”的软件

你的程序不能直接写入硬件,都必须通过操作系统

对软硬件之间进行交互:对上要给用户提供一个稳定的,高效的,安全的运行环境(目的!)

以人为本! 对下软硬件资源的管理,稳定的,高效的,安全的,能进行良好的工作(手段)

操作系统是怎么管理的:通过数据结构task_struct(PCB),对数据结构的增删查改来进行对数据的管理也就是:先描述在组织!!

操作系统对上怎么操作的?由于操作系统不允许用户直接访问所以开放接口:使用系统调用的接口

操作系统必须向上提供各种接口,方便上层使用—开放(只开放)

因为操作系统的底层是C语言写的,所以接口只能是C语言的接口,所有软件的底层,都必须和c直接或间接相关。Java的虚拟机,和python的解释都是用c写的

然而系统调用接口对于大部分学习成本高所以开放用户操作接口,比如程序员给写好的库,或者shell外壳,或者直接操作的图形化界面

系统调用接口,需要对系统有所了解,对一般程序员,使用会比较麻烦:库

进程

进程 = 内核数据结构(task_struct)+ 程序的代码和数据

运行起来的程序—》进程会被根据task_struct属性被os调度器调度,运行

课本:内核观点:担当分配系统资源(CPU时间,内存)的实体—正确但不好理解

一个程序从磁盘中读取到内存,它还不是个进程,要在操作系统存在在的数据结构中才叫进程。就比如我在清华大学,我就是清华大学的学生了吗?不是,要在清华大学的学生系统里才算。

也就是学生 = 人+属性;

进程 = 数据加属性。

操作系统中存在数据结构task_struct。我们的程序代码只是作为一个结构体的属性,由一个指针指向即可,结构体中还存在其它属性:编号,状态等等。实际上操作系统结构体里的属性相当多

Task——struct中重要的属性

把程序运行起来,本质就是在系统中启动了一个进程

PID进程标识符 区分进程唯一性

Exe属性  是可执行程序的位置,在磁盘中的位置磁盘

cwd(当前目录)  

当前路径:进程的CWD

Proc是内存级的属性文件,关机即清空,内存中的数据以文件的形式存在

Ppid父进程

Bash 命令行解释器 –shell所有命令行解释器的总称

命令行中,执行命令/执行程序,本质是bash的进程,创建的子进程了,由子进程执行我们的代码。  使用系统调用,创建进程

Fork创建一个子进程,返回一个

Linux进程整体是树形结构

父子进程 fork的代码共享,数据各自私有一份

进程之间有很强的独立性,多个进程之间,运行时互不影响,即便是父子

代码是只读的

一个函数,fork,怎么会有俩返回值

创建子进程的task_struct是拷贝父进程的

在fork返回之前,都已经生成父子进程了,只是还没有返回,所以都有return 语句,所以有俩返回值、。

Fork之后,谁先运行不确定。由OS调度器自主决定

PCB   :task_struck-PCB的一种

进程的状态   

等键盘的叫阻塞

等cpu的叫运行

1.并行和并发


CPU执行进程代码,不是把进程代码执行完毕,才开始执行下一个。而是给每一个进程预分配一个 时间片,基于时间片,进行调度轮转(单CPU下),并发

并发:在一段时间之内,让多个进程都得以推进,称之为井发

并行: 多个进程在多个CPU下分别,同时进行运行,这称之为并行


2.时间片


Linux/windows民用级别的操作系统,(分时操作系统)  ->调度任务追求公平


3.进程具有独立性 

  • 代码共享,数据私有:父子进程通过fork创建,代码共享,数据各自私有一份。进程之间有很强的独立性,多个进程之间运行时互不影响,即便是父子进程。
  • 返回值与调度:一个函数fork会有两个返回值。在fork返回之前,已经生成了父子进程,只是还没有返回,所以都有return语句。fork之后,谁先运行不确定,由操作系统调度器自主决定。


实时操作系统
等待的本质 :连入目标外部设备,CPU不调度!

阻塞挂起状态,在内存严重不足的时候,代码和数据会换入到磁盘的swap分区,只有,取到数据进入运行队列的时候将数据换入,效率慢了,时间换空间 。云服务器不用swap分区,换入换出是io很慢*

等待磁盘是状态D键盘S 

Main 的返回值是告知父进程/操作系统,我把任务完成的怎么样

僵尸状态--Z:维持退出信息,方便父进程和操作系统来进行查询,在查询结束后进程才会死亡

先创建task_struck再导入数据,task_struck创建好的时候就已经是个进程了。

释放的时候先释放代码和数据。

僵尸进程,如果没人管我,我会一直僵尸

父进程退出,子进程会被系统领养,叫孤儿进程

//
static const char * const task_state_array[] = {
    "R (running)",    /* 0   运行状态*/  
    "S (sleeping)",   /* 1   休眠状态 */
    "D (disk sleep)", /* 2   磁盘级的休眠状态--不可打断*/
    "T (stopped)",    /* 4   进程做了非法但是不致命的操作,被OS暂停了*/
    "t (tracing stop)", /*8  进程被追踪的时候,断点停下,状态就是t*/
    "X (dead)",       /* 16  死亡状态*/
    "Z (zombie)",     /* 32  僵尸状态*/
}

先创建task_struck再导入数据,task_struck创建好的时候就已经是个进程了。

释放的时候先释放代码和数据。

僵尸进程,如果没人管我,我会一直僵尸

父进程退出,子进程会被系统领养,叫孤儿进程

ps命令加pid可以查看进程状态

这个图片在杀死子进程的时候状态变成了Z

进程优先级

优先级数字越小优先级越高

PRI:当前进度的优先级

NI:优先级的nice数据 优先级的修正数据 -20~19

最终优先级 = pri(默认/老的default 80 )+nice  

进程切换

Eip(pc)寄存器,当前正在执行指令的下一条的地址  pc=当前地址+读进来的指令长度,ir读进来后pc指针就可以更新

Ir指令寄存器 正在执行的指令

切换核心:进程上下文数据的保存和恢复

1、取指令2、更新pc 3、分析执行指令

Cpu处理数据的时候产生的数据叫上下文数据

进程上下文数据保存在PCB‘里就好了

调度

FIDO调度  几乎没用了 因为有优先级

linux真实调度算法

新进程和时间片到了的进程被放到过期队列,不能放到活跃队列(会导致进程饥饿问题)

Active队列结束完了后,交换过期队列和活跃队列的指针就可以了

Nr_active 是队列有几个进程

Bit_map [5]位图,一次跳32个位置,最多查37次,

Linux内核O(1)调度算法

通过一个变量找结构体

task_struct内容分类:

标识符

描述本进程的唯一标示符,用来区别其他进程。

这是进程的一个唯一标识,用于在系统中区分不同的进程。

状态

任务状态,退出代码,退出信号等。

进程的状态包括运行、睡眠、停止等,以及进程退出时的相关代码和信号。

优先级

相对于其他进程的优先级。

进程的优先级决定了它在系统中的执行顺序,优先级高的进程会先得到 CPU 资源。

程序计数器

程序中即将被执行的下一条指令的地址。

这是 CPU 在执行程序时用于记录下一条要执行指令的地址的寄存器。

内存指针

包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针。

进程在内存中的位置和数据存储的指针,包括与其他进程共享的内存。

上下文数据

进程执行时处理器的寄存器中的数据(例如,要加 CPU,寄存器)。

当进程被切换时,当前的寄存器状态需要保存,这就是上下文数据。

I/O 状态信息

包括显示的 I/O 请求,分配给进程的 I/O 设备和被进程使用的文件列表。

进程在进行 I/O 操作时的相关状态和设备使用情况。

记账信息

可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。

用于记录进程使用系统资源的情况,如 CPU 时间、时钟周期等。

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

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

相关文章

Spring——容器:IoC

容器:IoC IoC 是 Inversion of Control 的简写,译为“控制反转”,它不是一门技术,而是一种设计思想,是一个重要的面向对象编程法则,能够指导我们如何设计出松耦合、更优良的程序。 Spring 通过 IoC 容器来…

全自动火腿肉馅斩拌机:

全自动火腿肉馅斩拌机通过斩切作用提高产品的细密度和弹性,广泛应用于肉制品的深加工制作,如制作肉丸、香肠等。其工作原理是利用斩刀高速旋转的斩切作用,将原料进行斩切和乳化处理,从而提高产品的细腻度和弹性。斩拌机具有以下特…

音视频入门基础:MPEG2-TS专题(3)——TS Header简介

注:本文有部分内容引用了维基百科:https://zh.wikipedia.org/wiki/MPEG2-TS 一、引言 本文对MPEG2-TS格式的TS Header进行简介。 进行简介之前,请各位先下载MPEG2-TS的官方文档。ITU-T和ISO/IEC都分别提供MPEG2-TS的官方文档。但是ITU提供的…

NCC前端调用查询弹框

系统自带的查询模板 弹框 调启使用默认的 查询模板 是在 单据模板的 列表模板中,有个查询区域 ,查询区域就是查询模板内容如果在列表页做客开 新增按钮 调启查询模板 无问题,但是目前需求是需要再卡片页面下调启系统标准的调启模板代码 //调…

第8章 利用CSS制作导航菜单

8.1 水平顶部导航栏 水平菜单导航栏是网站设计中应用范围最广的导航设计&#xff0c;一般放置在页面的顶部。水平导航适用性强&#xff0c;几乎所有类型的网站都可以使用&#xff0c;设计难度较低。 8.1.1 简单水平导航栏的设计与实现 8.1.1.1导航栏的创建 <nav>标签…

labview拆解日期字符串

今天在写测试时&#xff0c;发现有些时候需要把日期和时间拆分开来&#xff0c;由于项目采集到的日期是一个数字字符串&#xff0c;需要把他们转换成带日期格式的字符串分别显示&#xff0c;这里还是用到了数组到电子表格字符串转换的函数。 下面示例如下&#xff0c;首先我们…

Kafka - 启用安全通信和认证机制_SSL + SASL

文章目录 官方资料概述制作kakfa证书1.1 openssl 生成CA1.2 生成server端秘钥对以及证书仓库1.3 CA 签名证书1.4 服务端秘钥库导入签名证书以及CA根证书1.5 生成服务端信任库并导入CA根数据1.6 生成客户端信任库并导入CA根证书 2 配置zookeeper SASL认证2.1 编写zk_server_jass…

Ubuntu22.04安装DataEase

看到DataEase的驾驶舱&#xff0c;感觉比PowerBI要好用一点&#xff0c;于是搭建起来玩玩。Dataease推荐的操作系统是Ubuntu22.04/Centos 7。 下载了Ubuntu22.04和DataEase 最新版本的离线安装包 一.安装ubuntu22.04 在安装的时候&#xff0c;没有顺手设置IP地址信息&#xff…

使用iviewui组件库的坑

背景 使用view-design组件库的Input组件的时候&#xff0c;按照产品的要求&#xff0c;输入框中只能键入正整数。 使用效果 如果直接使用组件的type属性&#xff0c;设置类型为number时&#xff0c;乍一看没啥问题&#xff0c;但是当我们键入 小数点(.) 或者 e/E 后面没有跟任…

AI绘图最强软件stable diffusion,一文带你迅速了解!

有需要stable diffusion整合包可以扫描下方&#xff0c;免费获取 01 — 什么是 SD ​ Stable Difusion(简称 SD) 其三种概念。 1.用来指代稳定扩散(Stable Diffusion) 技术,如 Midjourney是基于Stable Difusion技术实现的就是指它运用了 Stable Diffusion 的技术原理。 …

Unity3D实现视频和模型融合效果

系列文章目录 unity工具 文章目录 系列文章目录👉前言👉一、效果展示如下👉二、VideoPlayer播放视频(一)👉2-1、Hieraechy面板右键创建videoPlayer👉2-2、Assets面板右键创建RenderTexture👉2-3、把设置好的RenderTexture拖到videoPlayer里面还有本地视频视频�…

stm32 ADC实例解析(3)-多通道采集互相干扰的问题

文章目录 一、问题现象&#xff1a;二、原因分析&#xff1a;1、测量值不准问题分析&#xff1a;2、采样干扰问题分析 三、解决办法&#xff1a;1、硬件&#xff1a;&#xff08;1&#xff09;、电源供电&#xff08;2&#xff09;、引脚电容&#xff08;3&#xff09;、减少采…

springboot 医院住院管理系统,计算机毕业设计项目源码035,计算机毕设程序(LW+开题报告、中期报告、任务书等全套方案)

摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;医院当然也不例外。医院住院管理系统是以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c;采用J…

Redis集群模式之Redis Sentinel vs. Redis Cluster

在分布式系统环境中&#xff0c;Redis以其高性能、低延迟和丰富的数据结构而广受青睐。随着数据量的增长和访问需求的增加&#xff0c;单一Redis实例往往难以满足高可用性和扩展性的要求。为此&#xff0c;Redis提供了两种主要的集群模式&#xff1a;Redis Sentinel和Redis Clu…

谷歌浏览器的自动翻译功能如何开启

在当今全球化的网络环境中&#xff0c;能够流畅地浏览不同语言的网页是至关重要的。谷歌浏览器&#xff08;Google Chrome&#xff09;提供了一项强大的自动翻译功能&#xff0c;可以帮助用户轻松跨越语言障碍。本文将详细介绍如何开启和使用谷歌浏览器的自动翻译功能&#xff…

中文书籍对《人月神话》的引用(161-210本):微软的秘密

中文书籍对《人月神话》的引用&#xff08;第001到160本&#xff09;>> 《人月神话》于1975年出版&#xff0c;1995年出二十周年版。自出版以来&#xff0c;该书被大量的书籍和文章引用&#xff0c;直到现在热潮不退。 2023年&#xff0c;清华大学出版社推出《人月神话》…

Docker了解

Docker是一种容器化技术&#xff0c;它可以将应用程序和其依赖项打包到一个独立的、可移植的容器中&#xff0c;以便在不同的环境中运行。Docker基于Linux操作系统的容器化技术&#xff0c;可以提供更轻量、更快速、更灵活、更一致的应用部署和管理方式。 Docker的基本概念包括…

【LLM Agents体验 3】利用Open-WebUI+Ollama本地部署Qwen2.5:7B大模型的安装指南

Open WebUI是一种基于 Web 的用户界面&#xff0c;用于管理和操作各种本地和云端的人工智能模型。它提供了一个直观的图形化界面&#xff0c;使用户可以方便地加载、配置、运行和监控各种 AI 模型&#xff0c;而无需编写代码或使用命令行界面。 Open-WebUI 是一款功能强大且易于…

新Activity启动时Task的位置(分屏场景)

目录 场景 场景 当类似上面的Task状态&#xff0c;我们自定义的三个按钮&#xff0c;启动新的Activity的时候&#xff0c;并没有去设置需要launche的task。 Intent intent new Intent();intent.setComponent(new ComponentName("com.android.dialer","com.and…

GitLab基于Drone搭建持续集成(CI/CD)

本文介绍了如何为 Gitee 安装 Drone 服务器。服务器打包为在 DockerHub 上分发的最小 Docker 映像。 1. 准备工作 创建OAuth应用 创建 GitLab OAuth 应用。Consumer Key 和 Consumer Secret 用于授权访问极狐GitLab 资源。 ps:授权回调 URL 必须与以下格式和路径匹配&…