liunx操作系统 进程的基本概念

进程的基本概念

  • 计算机结构体系
    • 冯诺依曼
  • 操作系统的管理
  • 进程
    • 进程的特性
      • 标识符
      • 系统的调用 创建新的进程
    • 进程的状态
      • 进程队列
      • 进程的状态
      • 在liunx查看进程状态、
  • 进程优先级

计算机结构体系

冯诺依曼

在这里插入图片描述
在没有存储器之前,所有的信息都是直接进入CPU,这样效率很差,因为读入,写出的速度远远慢于cpu计算的速度。所以中间加入缓存区,让cpu从内存中读取,读取的速度很快。所以冯诺依曼体系,极大层度,弥补了读入和写出速度慢的问题。

操作系统的管理

管理是一个抽象的词,我们可以描述一个管理的场景:
在这里插入图片描述
校长是管理者,督导员是传递消息的,学生是执行者。
回到计算机。 操作系统就是管理者,他是一款管理软件,督导员就是各种驱动,学生则是硬件设备。在操作系统的管理下,操作系统用结构体描述结构体的,该结构体描述了设备的重要特性,通过管理特性数据管理你,比如设置你关机,你就关机。

进程

进程的概念:进程是操作系统最重要的概念,他在书上都是说他是运行起来的程序。
在这里插入图片描述
由操作系统管理进程, 而进程则由两部分组成 进程控制块+运行的程序。运行的程序受到进程控制块pcb的管理。

进程的特性

标识符

进程在win中可以在任务管理器中查看,但是在liunx中只能用命令
在这里插入图片描述
我们也可结合管道
在这里插入图片描述
接下来,我们将看到第一个跑起来的进程
在这里插入图片描述
程序中: 会一直跑接下来我们查看程序的运行情况:

在这里插入图片描述
test是运行起来的程序其pid是其唯一标识符。
我们如何拿到进程的pid号的呢?在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
他的运行代码是:
在这里插入图片描述
重要概念:进程的工作目录
如何查看进程存在的位置呢?
在这里插入图片描述
工作目录
在这里插入图片描述
工作目录是程序写入文件中。比如我们使用程序创建一个文件,那么这个文件就在这里。也就是工作目录。

系统的调用 创建新的进程

首先认识一个函数fork
在这里插入图片描述
fork函数的功能如下:
为什么两个进程的fpid不同呢,这与fork函数的特性有关。fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:
1)在父进程中,fork返回新创建子进程的进程ID;
2)在子进程中,fork返回0;
3)如果出现错误,fork返回一个负值;

此时我们便可以通过返回值的不同:让父子进程干不同的事情。
在这里插入图片描述

进程之间是相互独立的,杀掉子进程,不影响父进程。同样,杀掉父进程,也不影响子进程。

进程的状态

进程队列

在这里插入图片描述
当程序中向硬件读取数据时,进程就会一直等着。当然,cpu并不是一直只为一个进程提供服务,在一个时间片内,cpu只为此进程提供服务。此时,排队就是必要的了。注意,此时排队的是,pcb进程控制块。
在这里插入图片描述小助手: 偏移量的求法:
在这里插入图片描述

进程的状态

进程的一般状态

  1. 运行:运行是程序正在进行的一般状态
  2. 阻塞:阻塞是程序正在等待资源的状态
  3. 挂起:当操作系统内存吃紧,操作系统将阻塞的部分进程拷贝到磁盘中。该进程被暂时挂起。
    等待其实就是排队,也就是pcb代替我进程去排队。

在liunx查看进程状态、

在这里插入图片描述
liunx有以上的几种状态

首选 ,我们写一个运行起来的父子程序。
在这里插入图片描述

在这里插入图片描述
神奇的是 test并不是r状态,而是s状态,s状态是浅度睡眠,浅度睡眠是可以打断的睡眠。D是 深度睡眠,深度睡眠,不可以被杀掉。
接下来,我们看T状态:使用命令kill -19 即可暂停进程

在这里插入图片描述
此时kill -18就可以继续运行

接下来,我们介绍孤儿进程,僵尸进程。
运行下面代码:

#include<iostream>
#include<unistd.h>
#include<sys/types.h>
#include<stdlib.h>
using namespace std;

int main()
{
  cout<<"mypid:"<<getpid()<<" "<<"myppid:"<<getppid()<<endl;
pid_t  x=fork();
int i=5;
int k=10;
if(x==0)
{
  while(i)
  {
    i--;
cout<<"我是子"<<endl;
  cout<<"mypid:"<<getpid()<<" "<<"myppid:"<<getppid()<<endl;
sleep(1);
  }
  exit(0);

}
else
{
  while(k)
  {
    k--;
cout<<" 我是父"<<endl;  
  cout<<"mypid:"<<getpid()<<" "<<"myppid:"<<getppid()<<endl;
sleep(2);
}
}
return 0;
}

当5次循环结束后,子进程结束,子进程并不会直接被干掉,而是变为僵尸进程,僵尸进程是等待父进程接受退出数据用的。
僵尸进程的危害:

  1. 僵尸进程的退出状态必须一直维持下去,因为它要告诉其父进程相应的退出信息。可是父进程一直不读取,那么子进程也就一直处于僵尸状态。
  2. 僵尸进程的退出信息被保存在task_struct(PCB)中,僵尸状态一直不退出,那么PCB就一直需要进行维护。
  3. 若是一个父进程创建了很多子进程,但都不进行回收,那么就会造成资源浪费,因为数据结构对象本身就要占用内存。
  4. 僵尸进程申请的资源无法进行回收,那么僵尸进程越多,实际可用的资源就越少,也就是说,僵尸进程会导致内存泄漏。

进程优先级

进程是有优先级的,否则不同的进程谁先谁后,就不好判断了。
进程的优先级如何查看呢
在这里插入图片描述
PRI是进程优先级的表示,普通进程都是80.
我们可以调整进程优先级。 总的来说,修改步骤:进入top后按“r”–>输入进程PID–>输入nice值。
在这里插入图片描述更改完成之后优先级变低了。数字越大,优先级越低。我们可以设置的优先级是被管理的,因为我们的优先级不能比系统进程更高。因为操作系统内部的进程管理我们的一切活动,如果操作系统都宕机了。谁来管理呢?

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

测试遍历1e5,1e8数组耗时

1e8大概0.38秒&#xff0c;即380ms 1e5耗时1ms左右&#xff1a; 代码使用方式来自&#xff1a;clock - C Reference (cplusplus.com)

第十三届蓝桥杯嵌入式省赛程序设计详细题解

第十三届蓝桥杯嵌入式省赛题目相对于第十二届较为简单&#xff0c;没有那么多串口的数据处理以及判断&#xff01; 第十三届省赛主要是制作一个可由串口设置密码的密码锁。本实验中&#xff0c;我们将用到LED模块、按键模块、串口模块、定时器的PWM模块以及官方会提供源码的LC…

STM32CubeIDE基础学习-软件安装,环境搭建

STM32CubeIDE基础学习-软件介绍及环境搭建步骤 文章目录 STM32CubeIDE基础学习-软件介绍及环境搭建步骤前言第1章 STM32CubeIDE 介绍1.1 软件描述1.2 软件支持的功能及特点 第2章 STM32CubeIDE 软件安装2.1 STM32CubeIDE 软件获取方法2.2 STM32CubeIDE 软件安装步骤2.2.1 错误安…

YOLOv9独家原创改进|加入RT-DETR中的HGBlock!

专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;主力高效涨点&#xff01;&#xff01;&#xff01; 一、改进点介绍 HGBlock是RT-DETR中使用的特征提取模块。 二、HGBlock模块详解 2.1 模块简介 HGBlock的主要思想&#xff1a; 一个并联的卷积模块与…

STM32(19)I2C模块 主机发数据

发送数据&#xff1a; 等待空闲&#xff1a; 发送起始位&#xff1a; 发送地址&#xff1a; 发送数据&#xff1a;

TypeScript学习笔记(上):TypeScript的介绍、安装及常用类型

我对TypeScript的理解就是&#xff0c;TypeScript是增加了类型校验的JavaScript&#xff0c;能够把运行期错误提升至编译期 TypeScript是什么&#xff1f; TypeScript&#xff08;简称&#xff1a;TS&#xff09;是 JavaScript 的超集&#xff08;JS 有的 TS 都有&#xff09…

【牛客】VL65 状态机与时钟分频

描述 题目描述&#xff1a; 使用状态机实现时钟分频&#xff0c;要求对时钟进行四分频&#xff0c;占空比为0.25 信号示意图&#xff1a; clk为时钟 rst为低电平复位 clk_out 信号输出 Ps 本题题解是按照1000的状态转移进行的&#xff0c;不按照此状态进行&#xff0c;编译器…

实现一个网页版的简易猜数字游戏

实现一个网页版的简易猜数字游戏 效果 代码截图 相关代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><t…

3.6作业

作业要求&#xff1a;数据库操作的增、删、改 程序代码&#xff1a; #include<myhead.h> int main(int argc, const char *argv[]) {//定义数据库句柄指针sqlite3 * ppDb NULL;//打开数据库&#xff0c;如果数据库不存在&#xff0c;则创建数据库//将数据库句柄由参数…

【软件工程】软件工程定义、软件危机以及软件生命周期

&#x1f338;博主主页&#xff1a;釉色清风&#x1f338;文章专栏&#xff1a;软件工程&#x1f338; 今日语录&#xff1a;What matters isn’t how others think of your ambitions but how fervently you cling to them. 软件工程系列&#xff0c;主要根据老师上课所讲提及…

数字化转型导师坚鹏:金融科技咨询方法论

金融科技咨询方法论 ——方法、做法、演法、心法 课程背景&#xff1a; 数字化转型背景下&#xff0c;很多机构存在以下问题&#xff1a; 不知道先进的金融科技咨询方法论&#xff1f; 不知道如何运作金融科技咨询项目&#xff1f; 不知道如何汇报咨询项目关键成果&…

MyBatis3源码深度解析(三)Connnection

文章目录 前言2.3 Connnection2.3.1 JDBC驱动程序的类型2.3.1.1 JDBC-ODBC Bridge Driver2.3.1.2 Native API Driver2.3.1.3 HDBC-Net Driver2.3.1.4 Native Protocol Driver 2.3.2 java.sql.Driver2.3.2.1 静态代码块加载驱动类2.3.2.2 SPI机制加载驱动类 2.3.3 DriverManager…

使用RabbitMQ实现延时消息自动取消的简单案例

一、流程图 二、导包 <!--消息队列 AMQP依赖&#xff0c;包含RabbitMQ--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency> 三、配置文件 #消息队列 …

nodejs安装教程(及过程中的易错)

nodejs&#xff1a;Nodejs 是基于 Chrome 的 V8 引擎开发的一个 C 程序&#xff0c;目的是提供一个 JS 的运行环境。 npm&#xff1a;npm 是 Node Package Manager 的缩写&#xff0c;意思是 Node 的包管理系统&#xff0c;是最大的软件包仓库 下载nodejs 首先我们需要在node…

制作高端的电子杂志神器推荐

根据市场调查数据显示&#xff0c;越来越多的消费者开始青睐电子杂志这种阅读方式。相比传统纸质杂志&#xff0c;电子杂志具有更高的阅读体验、更便捷的分享和传播方式以及更环保的阅读方式。此外&#xff0c;越来越多的企业也开始重视电子杂志的宣传作用&#xff0c;将其作为…

一次磁盘组扩容引起的事故

一、备份磁盘头信息 1、mkdir /home/grid/bakasm 2、kfed read /dev/rhdisk /home/grid/backasm/rhdisk.txt 二、赋权 1、chmod 660 /dev/rhdisk 2、chown grid:asmadmin /dev/rhdisk 三、确认没有pvid lspv |grep hdisk 如果存在 chedev -l hdisk -a pvclear 四、调…

状态模式:有案例就这么简单

状态模式是一种行为设计模式&#xff0c;它允许对象在内部状态改变时改变它的行为。这使得对象看起来好像修改了它的类。状态模式主要由三个部分组成&#xff1a;上下文&#xff08;Context&#xff09;、状态接口&#xff08;State Interface&#xff09;和具体状态&#xff0…

使用 AJAX 提升网页数据的动态交互

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

2024年最新Android面试精讲,面试题附答案

一. 开发背景 想要成为一名优秀的Android开发&#xff0c;你需要一份完备的知识体系&#xff0c;在这里&#xff0c;让我们一起成长为自己所想的那样。 Android 相关 1. Android 之 SharedPreferences 内部原理浅析 2. Android 源码分析-消息队列和 Looper 3. Android 源码分析…

第二十一周代码(java + DFS/BFS)

2024/03/04 周一 路径之谜 题目链接 【参考代码】 dfs剪枝 #include <iostream> #include <vector> using namespace std;int n; int dx[] {-1, 0, 1, 0}, dy[] {0, 1, 0, -1}; bool visit[21][21] {false}; int north[21], west[21]; vector<int…