IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: 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)


  • 进程通信

  • 管道? ? 分为无名管道pipe和 命名管道named pipe
  • 消息队列 message
  • 信号 signal
  • 共享内存? shared memory
  • 信号量 semaphore
  • 套接字 socket? ? 可用于不同系统之间,管道和消息队列只能在同一系统

信号

软中断信号(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创建的共享内存,不管创建的权限是什么,普通用户无法删除。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-08-16 12:07:58  更:2021-08-16 12:10:29 
 
开发: 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年12日历 -2024/12/28 19:00:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计