| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> Linux 内核、进程调度 -> 正文阅读 |
|
[系统运维]Linux 内核、进程调度 |
Linux内核操作系统是什么 内核是什么 从功能层面上来说,内核就是一个中间层,软件和硬件之间交互的中间层,链接层 从其他方面理解内核 系统调用,开放了很多接口;资源管理 内核实现的策略 宏内核 微内核 内核包含哪些核心的模块 进程的调度与切换 内存管理 虚拟内存机制 和网络交互的地方 设备驱动程序 进程通信机制&锁 其他模块 Linux进程调度进程分类实时进程? ?用户交互的进程,需要及时响应 普通进程? ?如压缩文件,视频的编码解码 上下文切换上下文切换指的是内核在CPU上对进程或者线程进行切换。上下文切换过程中的信息被保存在进程控制块(PCB-Process Control Block)中。PCB又被称作切换帧(SwitchFrame)。上下文切换的信息会一直被保存在CPU的内存中,直到被再次使用。 执行环境的变化 调度算法FIFO?? STF STCF RR 进程队列全局队列 局部队列 进程优先级查看进程优先级的命令 ps -l nice值nice值越高,优先级越低 用户可以设置的值,这个值是来影响优先级 Linux进程优先级和nice值 - leno米雷 - 博客园 (cnblogs.com) 优先级和nice的范围 nice? -20~19 进程优先级0~139 实时进程的优先级是0~100 普通进程的优先级是100~139 静态优先级 nice值来决定的优先级,权利在用户,用户在一开始就设定优先级,同时可以更改 动态优先级 内核来决定的,内核自动修改优先级 Linux调度器O(n)调度器? ? ?cpu进程队列 O(1)调度器? ? 优先级映射成了一个bitmap CFS调度器 【原创】(一)Linux进程调度器-基础 - LoyenWang - 博客园 (cnblogs.com) linux调度器源码分析 - 概述(一) - tolimit - 博客园 (cnblogs.com)
信号软中断信号(signal,又简称为信号)用来通知进程发生了事件。 注意,信号只是用来通知某进程发生了什么事件,无法给进程传递任何数据,进程对信号的处理方法有三种: 1)第一种方法是,忽略某个信号,对该信号不做任何处理,就象未发生过一样。 2)第二种是设置中断的处理函数,收到信号后,由该函数来处理。 3)第三种方法是,对该信号的处理采用系统的默认操作,大部分的信号的默认操作是终止进程。 signal库函数?signal库函数可以设置程序对信号的处理方式。 函数声明: sighandler_t?signal(int?signum,?sighandler_t?handler); 参数signum表示信号的编号。 参数handler表示信号的处理方式,有三种情况: 1)SIG_IGN:忽略参数signum所指的信号。 2)一个自定义的处理信号的函数,信号的编号为这个自定义函数的参数。 3)SIG_DFL:恢复参数signum所指信号的处理方法为默认值。? 程序员不关心signal的返回值。 共享内存共享内存(Shared Memory)就是允许多个进程访问同一个内存空间,是在多个进程之间共享和传递数据最高效的方式。 共享内存并未提供锁机制,也就是说,在某一个进程对共享内存的进行读写的时候,不会阻止其它的进程对它的读写。如果要对共享内存的读/写加锁,可以使用信号灯。 shmget函数shmget函数用来获取或创建共享内存,它的声明为: int?shmget(key_t?key,?size_t?size,?int?shmflg); 参数key是共享内存的键值,是一个整数,typedef unsigned int key_t,是共享内存在系统中的编号,不同共享内存的编号不能相同,这一点由程序员保证。key用十六进制表示比较好。 参数size是待创建的共享内存的大小,以字节为单位。 参数shmflg是共享内存的访问权限,与文件的权限一样,0666|IPC_CREAT表示全部用户对它可读写,如果共享内存不存在,就创建一个共享内存。 shmat函数把共享内存连接到当前进程的地址空间。它的声明如下: void?*shmat(int?shm_id,?const?void?*shm_addr,?int?shmflg); 参数shm_id是由shmget函数返回的共享内存标识。 参数shm_addr指定共享内存连接到当前进程中的地址位置,通常为空,表示让系统来选择共享内存的地址。 参数shm_flg是一组标志位,通常为0。 调用成功时返回一个指向共享内存第一个字节的指针,如果调用失败返回-1. shmdt函数该函数用于将共享内存从当前进程中分离,相当于shmat函数的反操作。它的声明如下: int?shmdt(const?void?*shmaddr); 参数shmaddr是shmat函数返回的地址。 调用成功时返回0,失败时返回-1. shmctl函数删除共享内存,它的声明如下: int?shmctl(int?shm_id,?int?command,?struct?shmid_ds?*buf); 参数shm_id是shmget函数返回的共享内存标识符。 参数command填IPC_RMID。 参数buf填0。 解释一下,shmctl是控制共享内存的函数,其功能不只是删除共享内容,但其它的功能没什么用,所以不介绍了。 注意,用root创建的共享内存,不管创建的权限是什么,普通用户无法删除。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 9:21:27- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |