剖析操作系统,深入其进程和线程底层知识

线程进程基础知识

CPU 赫兹(每秒变动的次数,通过高低电平的变换)
多核CPU ,有多个可以独立计算的核
控制器(含有程序计数器)
运算器(ALU计算单元 状态字寄存器 ->计算状态的保存)

存储器
缓存(价格高,速度快)主要集中在CPU的内部
主存(中,中)内存条
辅存(价格低,速度慢)SSD 磁盘

局部性原理
导致存储器出现层次性的主要原因
CPU访问存储器时,无论是存取指令还是存储数据,所访问的存储单元都趋于集中在一个较小的连续单元
28定律(20%的空间将会占用CPU访问时间的80%)
缓存-主存层次(解决主存速度的问题)
主存-辅存(解决主存容量不足)

操作系统

无OS(资源利用率低)
批处理(多道程序设计 -> 可以同时处理多个任务)
分时系统(人机交互 ->操作鼠标立马可以看到轨迹 多用户共享)

多道程序设计
计算机内存中同时存放多个程序
程序可以在计算机的管理下相互穿插运行
QQ和视频软件可同时运行
程序交替的使用时间片来运行

文件管理,相当于用户操作的是句柄
之后操作系统会在硬件进行一个保存
用户与计算机之间的接口(图形界面,命令行,系统调用)

用户态和内核态
内核态 专门运行内核相关的程序
用户态 专门运行用户编写的一些程序
Linux设计中
对不同的操作设计不同的操作等级
与系统相关的关键操作必须由最高级特权的程序来执行

内核态
内核空间 存放的是内核代码和数据
进程执行内核的代码
内核状态下的CPU可以访问内存所有数据,包括外围设备(磁盘等)

用户态
用户空间 存放的是用户的代码和数据
进程执行用户自己的代码(非系统调用之类的函数)
CPU只可访问有限的内存,不可访问外设

用户读取网卡需要转换为内核态,将对应的数据拷贝到内核空间,然后切换为用户态进行读取

用户切换为内核态
系统调用(读取网卡),异常中断(用户程序有些错误需要内核处理一下),
外围设备中断(DMA读取磁盘数据,完成后会告知用户状态的CPU转换为内核态进行处理)

同步和异步
同步 调用方一直等待被调用方准备数据然后返回 对应着调用方的阻塞
异步 调用方在被调用方准备数据的时间中处理其他的事情 对应着调用方的非阻塞
读取磁盘DMA时一直读取是同步
同步异步强调的是消息通信机制
阻塞非阻塞强调的是程序在等待调用结果时的状态

计算密集型(CPU密集型)和IO密集型
Web应用主要属于IO密集(读取网络和数据库)

深入线程和进程

进程存在的必要性
操作系统通过进程管理计算机的硬件资源
在多道程序设计当中,涉及到程序切换
进程起着隔离资源与运行环境,提升资源利用率
进程是系统进行资源分配和调度的基本单位
进程是程序独立运行的载体

进程的形态
32位系统进程有4G的虚拟空间
这些空间同样分为内核空间和用户空间
内核空间有一个结构叫进程控制块PCB(最重要的结构)
管理进程,记录进程的运行状态
每个进程拥有自己的进程控制块

PCB中标识符 唯一标记一个进程
状态 记录进程当前状态
程序计数器 记录下一条指令的地址
内存指针 保存指令,数据的内存地址
上下文数据 运行状态下使用的数据
IO状态信息 文件,设备的占用情况
记账信息 占用处理器的时间,时钟统计

其中的用户空间
栈 局部变量,函数参数,返回地址
堆 动态分配的内存
数据段 初始化非0的全局变量,静态变量
代码段 可执行的代码
BSS段:存放未初始化的全局变量
其中栈和堆的存储方向是相反的

进程的五状态模型还包括创建和终止
在系统中往往有多个处于就绪状态的进程,通常排成一个队列为就绪队列
在系统中往往有多个需要外围设备的进程,通常排成一个队列为阻塞队列

创建
在操作系统的内核状态分配PCB,然后将其插入到就绪队列当中
创建进程时拥有PCB但其他资源尚未就绪的状态叫做创建状态
fork函数创建进程
进程结束由系统清理或者归还PCB的状态为终止状态

线程详解

进程起着隔离资源与运行环境,提升资源利用率
线程主要为了提高系统内程序并发执行的速度 一个进程可以并发多个线程
也是能够独立运行的单位

线程控制块TCB
线程并发包括进程间并发 和 进程内多线程并发

线程的实现方式
内核支持线程 调度灵活 内核线程切换成本高(因为日常大部分操作都是用户态的)
用户级线程 用户自行调度,内核无法干涉 多对一关系 内核线程阻塞,所有线程无法运行
组合方式线程 多对多 阻塞可以进行调度,用户层切换也可以减少成本

Java,C++用户层面都是和内核级线程一对一的
Golang就是组合实现

寄存器级上下文(CPU中)
用户级上下文(保存在主存中)
系统级上下文(PCB中)
进程内线程的切换不需要切换进程内所需要的资源,稍微改一些线程的内存就行,开销比较小

协程的本质
协程(让步)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值