linux进程的概念

准备

博主:大大怪先森(记得关注哦!)
编程环境:xshell(点击下载)
所示代码:码源


提示:写完文章后,目录可以自动生成


前言

本文将讲解操作系统中进程概念的基本知识!!!


提示:以下是本篇文章正文内容

一、冯诺依曼体系

我们现在使用的笔记本,不常见的计算机,大部分的服务器都是遵循冯诺依曼体系!!
在这里插入图片描述

截止目前为止我们的计算机都是有硬件组成,基本都是按照冯诺依曼体系:
输入设备:包括键盘, 鼠标,扫描仪, 写板等。
输出设备:显示器,磁盘,显卡,音响等。
存储器:含有运算器和控制器等(里面含有很多的寄存器和高速缓存)。
运算器和控制器(cpu):含有运算器和控制器。

二、操作系统

1.基本概念

任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:

内核(进程管理,内存管理,文件管理,驱动管理)
其他程序(例如函数库, shell程序等等)

2.定位

在整个计算机软硬件架构中,操作系统的定位是: 一款纯正的“搞管理”的软件
简单来说:os就是一门专门用来软硬件资源进行管理工作的软件。
对上:给用户啊提供安全,高效,稳定的运行环境。
对下:管理好各种软硬件

在这里插入图片描述

3.如何管理?

先描述,再管理
1.描述起来,用struct结构体
2. 组织起来,用链表或其他高效的数据结构

三.进程

3.1进程的基本概念

课本概念:程序的一个执行实例,正在执行的程序等
内核观点:担当分配系统资源(CPU时间,内存)的实体

3.2描述进程-PCB

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

3.2.1task_struct-PCB的一种

在Linux中描述进程的结构体叫做task_struct。
task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息。

3.2.2task_struct的内容分类

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

3.3组织和查看进程

可以在内核源代码里找到它。所有运行在系统里的进程都以task_struct链表的形式存在内核里。
ls /proc/ (查看进程)在这里插入图片描述

3.4获取进程标识符

  • 进程id(PID)
  • 父进程id(PPID)
    在这里插入图片描述

3.5fork初识

  • fork有两个返回值(成功:给父进程返回子进程的pid,给子进程返回0失败:返回小于0)
  • 父子进程代码共享,数据各自开辟空间,私有一份(采用写时拷贝)
    在这里插入图片描述

3.6进程的状态

为了弄明白正在运行的进程是什么意思,我们需要知道进程的不同状态。一个进程可以有几个状态(在Linux内核里,进程有时候也叫做任务)

R (running):运行状态
S (sleeping),D (disk sleep):挂起状态(浅度睡眠和深度睡眠)
T (stopped):暂停状态
X (dead):死亡状态(回收进程资源 = 进程块 + 代码,数据)
Z (zombie):僵尸状态

在这里插入图片描述
在这里插入图片描述

3.6.1僵尸进程

僵死状态(Zombies)是一个比较特殊的状态。当进程退出并且父进程(使用wait()系统调用,)没有读取到子进程退出的返回代码时就会产生僵死(尸)进程
僵死进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码。
所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入Z状态
在这里插入图片描述

3.6.2孤儿进程

父进程如果提前退出,那么子进程后退出,进入Z之后,那该如何处理呢?
父进程先退出,子进程就称之为“孤儿进程”
孤儿进程被1号init进程领养,当然要有init进程回收喽。
在这里插入图片描述


3.7进程优先级

  • cpu资源分配的先后顺序,就是指进程的优先权(priority)。
  • 优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linux很有用,可以改善系统性能。
  • 还可以把进程运行到指定的CPU上,这样一来,把不重要的进程安排到某个CPU,可以大大改善系统整体性能。

3.7.1查看进程

在linux操作系统下,使用ps -al 查看进程
在这里插入图片描述
说明:
UID:代表执行者的身份
PID:代表这个进程的代号
PPID:代表进程由那个进程衍生出来的,即父进程的代号
PRI :代表这个进程可被执行的优先级,其值越小越早被执行(默认值是80)
NI :代表这个进程的nice值(取值范围为-20~19)
计算公式:PRI(新) = PRI(旧) + NI;
更改进程的nice值:top进入top后按“r”–>输入进程PID–>输入nice值
在这里插入图片描述

3.8环境变量

  • 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数
  • 环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性
    和环境变量相关的命令:
  1. echo: 显示某个环境变量值
  2. export: 设置一个新的环境变量
  3. env: 显示所有环境变量
  4. unset: 清除环境变量
  5. set: 显示本地定义的shell变量和环境变量

3.8.1测试PATH

echo: 显示某个环境变量值在这里插入图片描述
export: 设置一个新的环境变量,但是一定要注意只是修改本次环境变量退出操作系统,下次的环境变量不能被更改,如果需要永久的更改需要打开 ~/bashrc永久的更改环境变量。
在这里插入图片描述

3.8.2测试HOME和设置环境变量

echo $HOME:查看当前用户的指定工作路径
在这里插入图片描述
设计环境变量:在这里插入图片描述

3.8.3获取环境变量

命令行第三个参数

	1 #include<unistd.h>
    2 #include<stdio.h>
    4 int main(int agrc,char* argc,char* env[])
    5 {
    6   for(int i = 0;env[i];i++)
    7   {
    9    printf("%s\n",env[i]);                                                            
   10   }
   19   return 0;
   20 }

通过第三方变量environ获取

int main(int argc, char *argv[])
{
extern char **environ;
int i = 0;
for(; environ[i]; i++){
printf("%s\n", environ[i]);
}
return 0;
}

在这里插入图片描述

getenv函数获取
在这里插入图片描述

结语

希望本篇文章能给各位带来帮助,如有不足还请指正!!!
码字不易,各位大大给个收藏点赞吧!!!
在这里插入图片描述

  • 12
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值