Linux之进程管理基础概念

简介:

调用、调用接口、库调用

线性内存地址空间、物理内存地址空间、线性地址、物理地址

交换内存:缺页异常

进程内存结构

常驻内存集、虚拟内存集

进程、进程元数据、结构体、任务结构体、链表

进程类型、状态(read,runing,sleep,stopped,zombie)

可中断睡眠、不可中断睡眠

创建子进程的过程 

进程优先级、进程调度、进程队列

过期队列:抢占式多任务、系统调用IO

IO模型、系统调用IO等待过程

进程间通信:IPC




硬件    

wKioL1mG0aCBngAZAACxmFPnkEo823.png


编程接口

     syscall(系统调用)

    libcall(库调用)

    硬件


库调用: 用户空间发生(独立的模块或系统调用的二次封装)

系统调用:内核空间发生,特权指令

    **如果非内核将要运行特权指令,会发起软中断,CPU会通知内核,除非内核有漏洞,特权指令一定是由内核执行。


调用:载入事先编写好的功能模块

模块:由别人提供,调用此模块完成功能

调用接口:得到模块的途径


例如:想要一双鞋(功能),到鞋店去买(提供功能的位置),鞋店的大门(调用接口)。


内核的功能

    驱动硬件、用户及权限管理、网络管理、程序包管理、文件系统管理、进程管理、安全管理


    网络管理: ip,ifcfg,nmcli配置ip,route,dns。配置文件配置ip,dns,route,图形工具配置

    文件系统管理: 块组、bitmap,GDT,Supper Block,VFS,同步IO、异步IO,写时复制,快照,中断信号,同步、通知机制、扩展槽、适配器、控制器

    程序包管理:rpm , yum , dnf (yum比rpm多了查询搜索、事务历史功能),Ip比ifconfig多了(清空,查询过滤)

进程管理

    1)进程创建

    2)进程调度


CPU使用和不使用的区别

    1、都是以相同频率工作

    2、消耗电一样

    不使用,白白浪费性能

    使用,CPU占据60-80%都有价值。


线性内存地址空间、物理内存地址空间、线性地址、物理地址

wKioL1mbzy_A4gtLAABUeNBoVts280.png

线性内存地址: 进程使用的地址


进程只能通过线性地址追踪数据

    1)将地址映射关系保存于内核内存的task struct表中,由内核虚拟出进程内存为整个内存大小

    2)由cpu的MMU(Memory Manager Unit)单元完成映射


交换内存:虚拟内存,中进程内存突然增大,可能物理内存不够用。基于LRU算法找出最近最少使用的内存数据,就将物理内存中的数据放入同内存有相同格式的磁盘中,以后使用时,用相同的方法,将数据交换到磁盘中,将交换分区要使用的数据加载至物理内存中。

    当数据从磁盘中调回时,可能物理内存的地址发生变化。引起 “缺页异常”:虚拟内存中的数据地址映射的物理内存的地址没有数据

        1、大异常、小异常

        2、要从磁盘中读数据:1)数据在交换分区中。2)重读数据

wKioL1mb0vKRrlJqAAA_KWJxTzI149.png

进程内存结构

wKioL1mb1lPC95g6AAAjYLErLIY963.png

常驻内存集:不能交换出去的数据:指令所有空间"匿名页"

虚拟内存集:可以交换出去的数据:数据所有空间


进程:运行中的程序

    有生命周期:创建、运行、销毁


进程元数据

    位置:内核内存中,当进程切换或发起系统调用时,均会操作则表


进程元数据结构

wKioL1mbyEKgfJiQAAB-4tBay6A370.gif

task struct 任务结构体

thead_info 线程信息

flags 标识

run_list 运行列表

mm 内存结构

real_parent 真父

parent 养父

tty 在哪个终端启动

files 打开的文件

signal 自己持有的信号

物理地址和线性地址映射关系


结构体:保存进程元数据的结构


tast_struct : 进程元数据放至结构体中,称为任务结构体。一个进程也称为一个任务


链表

    1、任务结构体的组织结构

    2、每个结构体的结束处指向下一个有相同结构的结构体的起始处

wKiom1mbyuvyxgBvAAAou7KRTzo462.png

链表类型

    循环链表:最后 一个结构体的结束处指向第一个结构体的起始处

    双向链表:结构体的结束处指向下一个结构的起始处,并且此起始处又能指向上一个结构体的开始处

    双向循环链表:both above

wKioL1mbyzKTbvn0AABenvLFvSY128.png-wh_50


进程类型

    密集型

        CPU密集型:优先级低,运行进程少时,也可获取大量CPU资源

        IO密集型:优先级高,消耗CPU资源少,在需要CPU时,尽量满足。

    前、后台

        前台进程:在终端(控制器、虚拟、模拟)启动。 在终端也能启动后台进程(服务进程)或将前台进程送到后台。

        后台进程: 随系统启动而启动的进程


进程创建:程序分配cpu资源及内存资源,即为一个进程


刚开机时,进程放在cpu上运行,等内核掌控一切,创建内核空间

内核创建第一个进程(用户空间建立)/sbin/init


init进程:

    1、代替内核完成用户空间中操作

    2、不能代替内核完成 系统调用的执行


进程创建子进程

    1、子进程也能创建子进程

    2、子进程和父进程共用一段内存空间,内存空间只读

    3、当子进程需要修改内存空间中的数据时,基于写时复制完成

wKiom1mbzgfhCy1NAAAvuTI2jAc568.png


进程销毁:父进程替子进程收尸,如果父进程先于子进程挂。则为子进程找一个养父,才能收尸。


进程的状态:

    ready: 在进程队列中等待运行

    runing: 在cpu上运行

    sleeping: 睡眠

    stopped: 在内存中,有task struct但不会调度至cpu上运行,除非手动启动

    zombie: 没有父进程清理尸体


睡眠

    可中断睡眠:

        运行队列:等待被调度至CPU上运行

        过期队列:CPU时间消耗完毕

    不可中断睡眠

        过期队列:系统调用等待IO过程


进程运行中的进程需要完成特定功能

    1)系统调用: 特权指令的封装(程序操作硬件时,发起系统调用) 

    2)子进程完成:父进程调用程序,运行程序创建一个子进程完成功能。

wKioL1mb22rTY_mBAAAcNUkI7cI836.png


进程优先级、进程调度、进程队列

    进程优先级:0-139,0-99:实时优先级,不可调。 100-139(-20,19)静态优先级:普通用户只能调高,root用户没有限制


    进程调度:kernel按cpu划分时间片,依据优先级从运行队列挑选出优先级最高的队列,下次调度至cpu上运行

        只扫描运行队列,找到优先级最高的队列,即为下次调度至cpu上执行的进程


    进程队列:一个优先级对应2个队列:等待被调度至cpu上运行的的队列、过期队列

        1、提升进程调度能力

        2、一共有280个队列


     过期队列:运行队列运行完毕,过期队列和运行队列会互换位置

wKiom1mbxX6hACH1AAA6eKBmGFg586.png

Linux 多任务模式:抢占式多任务

    进程运行时,有几个时间点可以被其他高于当前进程的进程所抢占。被抢占的进程,调度至过期队列,等待下一个循环

 

系统调用等待IO过程:

wKioL1mbuYLinxD7AABnKiVM9WU998.png


wKioL1mbuayCmFmxAAAXJqxmDSM843.png

发起系统调用的进程,等待系统调用IO时,也会被调度至过期队列中,等待下一个循环


系统调用内核完成IO操作

wKiom1mbwQKxGYqsAAAjl965c2U281.png

第一阶段:kernel将磁盘中的数据加载至内存中

第二阶段:将Kernel内存中的数据复制到进程内存中(进程IO过程)


IO模型

同步、异步

阻塞、非阻塞


左侧进程在内核完成特权指令时的的状态。

右侧内核执行特权指令的阶段


同步IO

阻塞:进程挂起,第二阶段看着内核将数据复制到进程内存中(挂起)

非阻塞:进程不挂起,反复查看内核是否已经完成第一阶段,第二阶段看着内核将数据复制到进程内存中

wKioL1mbw6DSglGSAAAuW3HokW0071.png

wKiom1mbw8GAf6a9AAA7Zb6hHwE145.png

wKioL1mbw8zA0PHGAAAsytKSPHI500.png

异步IO

wKioL1mbxCHiLZOyAAAraVK93pg962.png


IPC: Inter Process Communication

    同一主机: 信号、share memory 、 semenphor

        信号 signal(masage queue)

        共享内存, share memory 找一段内存空间扔数据,另一个进程从内存中读数据

        旗语 semnphor

        管道: pipe


    不同主机: rpc,socket

        rpc ,remote processcure call 本机发起调用,在另一个主机执行

        socket, ip: port 通信基于TCP,通信前建立TCP连接,二者间,建立虚拟链路











本文转自 lccnx 51CTO博客,原文链接:http://blog.51cto.com/sonlich/1958340,如需转载请自行联系原作者
目录
相关文章
|
25天前
|
消息中间件 存储 算法
【软件设计师备考 专题 】操作系统的内核(中断控制)、进程、线程概念
【软件设计师备考 专题 】操作系统的内核(中断控制)、进程、线程概念
68 0
|
28天前
|
Shell Linux 调度
【Shell 命令集合 系统管理 】Linux 调整进程优先级 renice命令 使用指南
【Shell 命令集合 系统管理 】Linux 调整进程优先级 renice命令 使用指南
36 0
|
28天前
|
存储 监控 Linux
【Shell 命令集合 系统管理 】⭐⭐⭐Linux 查看当前正在运行的进程信息 ps命令 使用指南
【Shell 命令集合 系统管理 】⭐⭐⭐Linux 查看当前正在运行的进程信息 ps命令 使用指南
41 0
|
28天前
|
存储 Shell Linux
【Shell 命令集合 系统设置 】⭐⭐⭐Linux 限制进程资源 ulimit命令 使用指南
【Shell 命令集合 系统设置 】⭐⭐⭐Linux 限制进程资源 ulimit命令 使用指南
37 0
|
28天前
|
监控 Shell Linux
【Shell 命令集合 系统管理 】⭐⭐⭐Linux 向进程发送信号 kill命令 使用指南
【Shell 命令集合 系统管理 】⭐⭐⭐Linux 向进程发送信号 kill命令 使用指南
31 0
|
25天前
|
消息中间件 Linux 调度
【Linux 进程/线程状态 】深入理解Linux C++中的进程/线程状态:阻塞,休眠,僵死
【Linux 进程/线程状态 】深入理解Linux C++中的进程/线程状态:阻塞,休眠,僵死
65 0
|
7天前
|
算法 Linux 调度
深度解析:Linux内核的进程调度机制
【4月更文挑战第12天】 在多任务操作系统如Linux中,进程调度机制是系统的核心组成部分之一,它决定了处理器资源如何分配给多个竞争的进程。本文深入探讨了Linux内核中的进程调度策略和相关算法,包括其设计哲学、实现原理及对系统性能的影响。通过分析进程调度器的工作原理,我们能够理解操作系统如何平衡效率、公平性和响应性,进而优化系统表现和用户体验。
18 3
|
12天前
|
监控 Linux Shell
初识Linux下进程2
初识Linux下进程2
|
12天前
|
Linux 编译器 Windows
【Linux】10. 进程地址空间
【Linux】10. 进程地址空间
19 4
|
17天前
|
Web App开发 人工智能 Ubuntu
【Linux】Linux启动/查看/结束进程命令(详细讲解)
【Linux】Linux启动/查看/结束进程命令(详细讲解)