linux 内核总结

news2024/11/28 18:48:31

注意:队列只是一格以前的称呼,底层是链表

进程

多个cpu,每个cpu都有自己的进程队列

进程分类: 

 实时进程   与用户交互的进程,需要及时的响应(优先级 0~100) 

普通进程   响应不需要那么及时的进程。压缩文件,视频的编码解码(由先级100~140)

上下文切换:

将p1进程的一些环境存放到内核的栈里面,然后将p2加载进内存中去运行

上下文:进程的一些信息,程序计数器,变量,程序运动到哪了,一些寄存器里面的值。保存在内核的栈里面

调度算法: 

0~99 优先级 实时进程

轮询调度策略

将cpu分配给就绪队列首进程规定时间片时间,每个进程轮流的运行一个时间片, 

时间片用完了就排到就绪队列的尾部 、同等优先级抢占,不同优先级时间片轮询

 100~130   普通进程

完全公平的策略 cfs 

按照优先级一个个运行,可以被实时进程抢占

每个进程的运行时间=sched_latency_ns * 进程权重值 / 运行队列上所有进程权重之和。

静态进程 可以在进程启动的时候使用nice 和sched_setscheduler()系统调用更改,否则的话运行期间保持恒定

linux进程状态

Linux系统中的进程主要有以下六种状态

(1)TASK_RUNNING(可运行状态)。正在运行的进程或在可运行进程队列(run_queue)中等待运行的进程处于该状态。它实际上包含一般操作系统原理教材中所谓进程三种基本状态中的运行态就绪两种状态

个人认为  运行队列 与就绪队列  是彼此独立的

(2)TASK_INTERRUPTIBLE(可中断阻塞状态)。处于可中断阻塞状态的进程排成一个可中断阻塞状态进程队列,该队列中的阻塞进程在资源有效时,能被信号或中断唤醒进入到运行态队列

 (3)TASK_UNINTERRUPTIBLE(不可中断阻塞状态)。不可中断指的是进程不响应信号。处于不可中断阻塞状态的进程排成一个不可中断阻塞状态进程队列。该队列中的阻塞进程,不可被其他进程唤醒,只有被使用wake_up()函数明确唤醒时才能转换到可运行的就绪状态

(4)TASK_STOP/TASK_TRACED(暂停状态)。当进程收到信号SIGSTOP、SIGTSTP、SIGTTIN或SIGTTOU时就会进入暂停状态。可向其发送SIGCONT信号,让进程转换到可运行状态

(5)TASK_DEAD-EXIT_ZOMBIE(僵死状态)。表示进程停止但尚未消亡的一种状态。此时进程已经结束运行并释放掉大部分资源,但父进程尚未收回其PCB。在进程退出时,将状态设为TASK_ZOMBIE,然后发送信号给父进程,由父进程再统计其中的一些数据后,释放它的task_struct结构。处于该状态的进程已经终止运行,但是父进程还没有询问其状态。
(6)TASK_DEAD-EXIT_DEAD(退出状态),处于此状态的进程即将被销毁,EXIT_ DEAD非常短暂,几乎不可能通过ps命令捕捉到。

不同的状态都有一个队列,存放着进程

挂起与阻塞之间的区别,挂起是将资源从内存中移除,是被动的,阻塞是资源不足仍在内存中

进程切换的内容

上下文切换:

将p1进程的一些环境存放到内核的栈里面,然后将p2加载进内存中去运行

上下文:进程的一些信息,程序计数器,变量,程序运动到哪了,一些寄存器里面的值。保存在内核的栈里面,

进程的创建

clone  

写时复制:允许父子进程读取相同的物理页,单只有子进程准备写的时候才会去复制新的物理页

fork

轻量级进程允许父子进程共享很多内核数据结构:页表  打开文件表  信号处理等

 vfork

vfork允许子进程共享父进程的内存地址空间

进程通信

管道

连接一个读进程一个写进程,以实现他们之间通信的共享文件。向管道提供输出的发送进程(即写进程),以字符流形式将大量的数据送入管道,而接收管道输出接收进程(即读进程)可以从管道中接收数据

 

管道的内部机制:

 

进程1 将自己的进程地址空间中的数据先复制到inode 指定的物理页面上,然后进程2 则复制 inode 指定的页面(同一个页面,即共享的数据页)上的数据到自己的进程地址空间上。这就完成了进程1的写,进程2的读,反之

一样。换句话说共享了一个物理页

消息队列(链表)

多个进程都可以操作的队列,可以往里面写入数据和读取数据

共享内存

不同进程之间本来同一个虚拟地址映射的物理地址是不同的,我们将它设置为相同的内存,这样就可以实现通信

信号量

信号

信息理解为软件中断,每一个进程都维护者一个信号表,一个进程收到信号与处理器处理一个中断差不多

 

信号产生 -> 信号注册 -> 信号在进程中注销 -> 信号处理函数执行完毕

 

来自 <Linux应用 之 信号_才大难为用的博客-CSDN博客>

 

内核对B进程信号设置完成后,就会发送中断请求给B进程,这样B进程就进入到内核态,这个时候进程B根据那个信号表,查找对应的此信号的处理函数,然后设置frame,设置好之后,跳回到用户态执行信号处理函数,处

 

理完成后,再次返回到内核态,再次设置frame,然后再次返回用户态,从中断位置开始继续执行

socket

linux应用 ---线程同步

互斥锁

只能锁或者开锁

条件变量

条件变量通常搭配互斥锁来 

一个线程等待某个条件满足而被阻塞; 另一个线程中,条件满足时发出“信号

自旋锁

可以使用 pthread_spin_lock()函数或 pthread_spin_trylock()函数对自旋锁进行加锁,前者在未获取到锁时
一直“自旋”;对于后者,如果未能获取到锁,就立刻返回错误,错误码为 EBUSY。不管以何种方式加锁,
自旋锁都可以使用 pthread_spin_unlock()函数对自旋锁进行解锁。其函数原型如下所示

注意:互斥锁在没获取到锁前访问会陷入睡眠

读写锁

当读写锁处于写加锁状态时,在这个锁被解锁之前,所有试图对这个锁进行加锁操作(不管是以读
模式加锁还是以写模式加锁)的线程都会被阻塞。
当读写锁处于读加锁状态时,所有试图以读模式对它进行加锁的线程都可以加锁成功;但是任何以
写模式对它进行加锁的线程都会被阻塞,直到所有持有读模式锁的线程释放它们的锁为止

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu的安装与部分配置

该教程使用的虚拟机是virtuabox&#xff0c;镜像源的版本是ubuntu20.04.5桌面版 可通过下面的链接在Ubuntu官网下载&#xff1a;Alternative downloads | Ubuntu 也可直接通过下面的链接进入百度网盘下载【有Ubuntu20.04.5与hadoop3.3.2以及jdk1.8.0_162&#xff0c;该篇需要使…

openlayers点线面绘制工具栏

效果大概如上&#xff0c;点击了按钮之后在地图上绘制相对应的点/线/面。 代码部分&#xff1a; 首先放个容器 <div id"toolbar"></div> js部分&#xff08;因为地图已经创建好了&#xff0c;我这里就不放地图的代码了&#xff0c;如果需要可以看我上…

《Docker调试技巧与工具:解决常见容器问题,助力容器应用稳定运行》

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

Leetcode 滑动窗口题目总结

(Leetcode 滑动窗口题目总结) 1&#xff1a; 3.无重复字符的最长子串 https://leetcode.cn/problems/longest-substring-without-repeating-characters/description/子串 和 子序列的区别&#xff1a;字串是连续的&#xff0c;子序列是非连续的。快慢指针 i 和 j&#xff0c;…

登录页的具体实现 (小兔鲜儿)【Vue3】

登录页 整体认识和路由配置 整体认识 登录页面的主要功能就是表单校验和登录登出业务 准备模板 <script setup></script><template><div><header class"login-header"><div class"container m-top-20"><h1 cl…

【外卖系统】员工信息分页查询

需求分析 当数据较多时&#xff0c;如果将数据在一个页面中全部展示出来会显得比较乱&#xff0c;不便于查看&#xff0c;所以一般系统都会以分页的方式来展示列表数据。 代码开发 页面发送ajax请求&#xff0c;将分页查询参数&#xff08;page、pageSize、name&#xff09;…

精密空调监控太难?手动太慢?这才是最牛的工具!

在医疗设施中&#xff0c;精密空调监控是一项至关重要的系统。它扮演着保障患者健康和医疗操作顺利进行的关键角色。 精密空调系统能够确保手术室、实验室和重症监护室等关键区域内的恒温、湿度和空气质量处于合适状态&#xff0c;从而保证医疗设备的正常运行和医护人员的舒适工…

【考研前阳了】成电858上岸学长经验分享

这个系列会邀请往届学长学姐进行经验分享~欢迎后台回复经验分享&#xff0c;进行投稿&#xff01; 经验贴征集&#xff1a;前人栽树&#xff0c;后人乘凉&#xff0c;上岸同学也是看着经验贴一点一点过来的&#xff0c;有偿征集各位同学的经验分享&#xff0c;以此来帮助更多的…

power dns recursor 4.5以后版本的奇葩问题

问题 最近升级了 pdns-recursor 从 4.1.X 升级至 4.8.x 出现下面问题 效果为 nslookup 可以返回 ip 地址 dig 无法返回对应 ip 地址 ad dns 服务器转发过来的解析都不响应 tcp 抓包如下 当使用 nslookup 请求时 addition rrs 请求为 0 当使用 dig 请求时 addition rrs 请求为 1…

[Ubuntu 22.04] 安装Harbor

1. docker安装 [Ubuntu 22.04] 安装docker&#xff0c;并设置镜像加速 2. Harbor脚本功能 Harbor安装包文件作用解释&#xff1a; prepare 环境准备 common.sh 环境检测脚本&#xff0c;在安装过程中会运行该脚本来检测docker、docker-compose、golang等是否符合要求 harbor…

51单片机--AD/DA

AD/DA介绍 AD和DA是模拟信号和数字信号之间的转换过程。 AD&#xff0c;全称为模拟到数字&#xff08;Analog-to-Digital&#xff09;&#xff0c;指的是将模拟信号转换为数字信号的过程。在AD转换中&#xff0c;模拟信号经过采样、量化和编码等步骤&#xff0c;被转换为离散的…

liteflow 2.10 配置中心简单记录

除nacos是一个key 同时管理chain和script node外,可以理解为配置文件整体放到一个key下nacos下的文件必须是xml格式,系统只实现了xml parser其它etcd,zk,Apollo 是两个namespace/path(chain及script node各一)下多个key,每个key对应一个chain/node所有配置中心的核心代码…

跟我一起从零开始学python(十)Hadoop从零开始入门

前言 回顾之前讲了python语法编程 &#xff0c;必修入门基础和网络编程&#xff0c;多线程/多进程/协程等方面的内容&#xff0c;后续讲到了数据库编程篇MySQL&#xff0c;Redis&#xff0c;MongoDB篇&#xff0c;和机器学习&#xff0c;全栈开发&#xff0c;数据分析前面没看…

【Windows】不要让你的win键落灰!掌握常用的组合快捷键,使用电脑更高效了

Windows 操作系统提供了丰富的键盘快捷键&#xff0c;能够大幅提高工作效率和操作便利性。在此介绍一些与 Win 键相关的常用快捷键&#xff0c;帮助你更好地利用 Windows 系统。想要在使用电脑时更高效吗&#xff1f;掌握常用的组合快捷键&#xff0c;让你的 Win 键从此不再落灰…

phkit - 中英音素处理、文本转拼音、文本正则化

文章目录 关于 phkit安装包含组件pinyinkitchinesesymbolsequencepinyinphonemenumberconvertstyleenglish关于 phkit phoneme toolkit: 拼音相关的文本处理工具箱,中文和英文的语音合成前端文本解决方案。 github : https://github.com/KuangDD/phkit

【Lua学习笔记】Lua进阶——Table(2)

文章目录 Table的一万种用法二维数组类和结构体Table操作insert & removesortconcat 接上文【Lua学习笔记】Lua进阶——Table&#xff0c;迭代器 Table的一万种用法 二维数组 a {{ 1, 2, 3 },{ 4, 5, 6 }, } print(#a) -->2 for i1,#a dob a[i]for j1,#b doprint(b[…

opencv-25 图像几何变换04- 透视 cv2.warpPerspective()

什么是透视&#xff1f; 透视是一种几何学概念&#xff0c;用于描述在三维空间中观察物体时&#xff0c;由于视角的不同而产生的变形效果。在现实世界中&#xff0c;当我们从不同的角度或位置观察物体时&#xff0c;它们会呈现出不同的形状和大小。这种现象被称为透视效果。 透…

web-文件上传和upload-labs靶场通关

目录 前端过滤 uploads-lab-1: 后端验证 upload-labs-2&#xff1a;mime验证 upload-labs-3&#xff1a;黑名单绕过 upload-labs-4&#xff1a;黑名单绕过-.htaccess(这里得用旧版的phpstudy&#xff0c;新版的不行) upload-labs-5&#xff1a;后缀名绕过 upload-labs-…

探索南美专线:开启您的国际贸易之旅

​作为一个国际贸易从业者&#xff0c;您可能已经听说过南美专线。南美洲作为一个充满潜力的市场&#xff0c;吸引着越来越多的企业前来探索商机。南美专线是连接亚洲和南美洲的重要贸易通道&#xff0c;它为企业提供了便捷、高效的物流运输服务&#xff0c;助力您开拓南美市场…

Pycharm工具Python开发自动添加注释(详细)

方法自动添加参数注释 定义了一个函数&#xff0c;在函数下面敲入了三个双引号后&#xff0c;enter回车并没有自动出现注释&#xff0c;如图&#xff1a; 解决办法 Pycharm中依次打开File —> Settings —> Tools —> Python Integrated Tools&#xff0c;如图&…