linux(基础回顾 进程概念 内存管理 程序地址空间)

/进程概念

//冯诺伊曼体系结构;现代计算机的硬件体系结构

//将计算机硬件划分为5大类 输入设备 输出设备 存储器 运算器 控制器

//在计算机中 数据流是围绕内存工作 意味着cpu要处理任意的数据 都需要先把数据放在内存中

//因此如果我们要应用一个程序 先把这个程序的指令加数据 加载到内存中

//操作系统的功能层次划分

//操作系统是什么 是一个软件 负责对计算机上的软硬件资源进行管理

//系统调用接口 操作系统内核提供给上层用于进行计算机操作的接口

//库函数 就是对系统调用接口进行二次封装接口

//库函数和系统调用的关系 库函数内部调用了系统调用接口

//进程概念

//站在用户的角度 运行中的程序

//站在系统的角度 对应运行中的程序的动态运行中的描述

//这个描述在linux下是结构体形式 struct task_struct{}

// 进程到底描述了什么信息

// 1 标识符 进程ID pid

// 2 进程调度信息 描述了如何调度一个程序的运行

// 3 进程状态 对进程不同运行状态进行描述 让进程在合适的时候做合适的事情

// 4 进程的内存管理 进程内部所有的数据都会占据内存 了解进程内部内存管理方式

// 5 进程内打开的文件信息 通过了解这块信息 更加深入的了解系统调用I/O

// 6 进程间通信资源管理 描述进程间通信相关资源信息

// 7 进程信号的软中断相关内容

// 8 . . .

// 1 标识符 进程ID 其实就是一个数字

// 在linux下可以通过ps指令查看进程信息 ps -ef

// 2 进程调度

// 并行 多个进程可以同时进行

// 串行 有多个进程 但是同一时间只能运行一个

// 并行和串行 在计算机上取决于CPU核心数量 每个CPU核心上都有一套独立的寄存器

// 计算机上运行的程序非常多 但CPU核心很少 如何让他们同时运行

// CPU分时机制

// 一个程序运行的时候 只能cpu上运行很短的一段数据(时间片) 时间片运行完毕 则切换下一个进程运行

// 分时机制 实现了多个进程在宏观上的并行 但是我们要理解微观上他们实际上是串行的

// 一旦程序是切换运行的 等切换回来的时候 cpu又怎么知道该从哪里开始继续运行

// 为了解决这个问题 因此在task_struct (PCB-进程控制块) 中就有一系列的程序保存程序的运行上下文

// pc寄存器内容 即将要执行的指令地址

// 一系列上下文数据 正在处理的数据 即将处理的数据

// 因此一旦cpu切换轮转回来了 就可以通过pid找到task_struct 从中取出这些上下文数据

// cpu寄存器中 cpu就可以从原来的位置继续向下执行 处理用来没有处理完的数据

//进程状态

//三态模型 就绪 运行 阻塞

//linux 的进程状态

// 运行态 就绪+运行 拿到时间片就能运行 以及正在运行的都属于运行态

// 可中断休眠态 不但可以被条件唤醒 还可以被打断的阻塞状态

// 阻塞态有一个唤醒条件 只有唤醒条件达成的时候才能转换为就绪态

// 不可中断休眠态 只能被条件唤醒 不可以被打断的阻塞状态

// 停止态 让进程停止运行 只能通过特殊方式唤醒

// 追踪态 调试的时候涉及到的状态

// 死亡态 进程退出后 资源全部释放完处于的一个短暂状态

// 僵尸态 一个进程退出了 但是资源没有被完全释放的状态

// 产生 由于子进程退出 但是父进程没有关注子进程的退出状态所导致的

// 危害 会造成系统资源泄露

// 解决 kill -9 强制杀死

// 避免 进程等待 等待子进程退出 获取他的返回值

//内存管理 程序地址空间

// 程序地址空间 进程的虚拟地址空间

// 进程的地址空间是虚拟的地址空间 ,并不是给每个进程都分配了4G内存

// 程序地址空间 实际上是系统给我们的进程所描述的一个虚拟的地址空间

// 这个描述在pcb中是 mm_struct结构体

// 虚拟地址空间的作用

// 实现数据在物理内存中的离散式存储 提高内存利用率 并进行内存访问控制 提高进程独立性

// 虚拟地址的实现 依赖一个关键性技术 页表 (内存的分页式管理)

// 虚拟地址空间 进行虚拟地址描述

// 页表信息 虚拟地址和物理地址的映射关系 访问权限 缺页中断标志

// 4k页面大小 4G内存有多少页面

// 1024*1024=2^20

// 虚拟地址组成 页号+页内偏移

// 32为系统下 地址大小4字节 32个比特位

// 页号 占据地址中的高20位

// 页内偏移 占据地址中的低12位

相关推荐
Bruce_kaizy11 分钟前
c++ linux环境编程——文件io介绍以及open 、write 、read 三剑客深度详解
linux·服务器·c++·ubuntu·操作系统·文件io
亦良Cool26 分钟前
VMware虚拟机ubuntu瘦身,解决虚拟机越用越大
linux·运维·ubuntu
星辰&与海2 小时前
KVM + QEMU虚拟化方案
linux·运维
宋浮檀s2 小时前
应急响应——恶意流量&攻击行为识别
linux·运维·网络·网络安全·应急响应
REDcker2 小时前
Linux OverlayFS详解
java·linux·运维
Royzst2 小时前
xml知识点
java·服务器·前端
TechWJ3 小时前
数据库在公司内网,出差路上想查数据怎么办?
服务器·数据库·mariadb
zizle_lin3 小时前
WSL的系统安装和部分环境配置(按需操作)
运维
lwx9148523 小时前
Linux系统中用户锁定后如何解锁
linux·运维·服务器
zhangrelay4 小时前
ROS 2 Lyrical Luth启程-Ubuntu26.04-
linux·笔记·学习·ubuntu