博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux内核子系统
阅读量:2434 次
发布时间:2019-05-10

本文共 1655 字,大约阅读时间需要 5 分钟。

linux内核架构7个组成部分

system call interface(SCI),Process Management(PM),Memory Management(MM),Arch(体系结构相关代码,和处理器相关代码),Virtual File System(VFS),Network Stack,Device driver;
其中与驱动开发相关的是内存管理子系统和进程管理子系统

一、linux内存管理子系统

1.内存管理模型

内存管理子系统的职能
1.1虚拟地址和物理地址映射
1.2物理内存分配
2.地址映射管理
32位,则虚拟内存为4G,其中0G-3G为用户空间,
3G-4G为内核空间,内核空间分为4部分,直接映射区,vmalloc区,永久映射区,固定映射区
3.虚拟地址-物理地址的寻址方式
cr3寄存器的页目录基地址+32地址的高10位作为偏移在页目录里得到一个地址,该地址指向一个页表,该地址+中间10位的偏移,指向物理页的基地址,物理页的基地址+低12位的偏移找到物理存储单元
4.内核空间具体分析
直接映射区虚拟地址为3G+物理地址
vmalloc区虚拟映射与物理地址无线性关
永久内存映射区固定用来访问高段内存。
固定映射线性区虚拟地址和特殊寄存器建立关系
6.物理内存的分配
malloc、vmalloc调用分配
kmolloc提前分配

二、进程管理

1.进程与程序

程序:存放在磁盘上的一系列代码和数据的可执行映像,是一个静止的实体
进程:是一个执行中的程序,它是动态的实体。
2进程四要素:
2.1.有一段程序供其执行
2.2.有进程专用的内核空间堆栈
2.3.在内核中有一个task_struct数据结构,即通常说的进程控制块,有了该数据结构,进程才能成为内核调度的一个基本单位接收内核调度。
2.4.有独立的用户空间
3.有独立的用户空间:进程
没有有独立的用户空间但是有共享的用户空间:用户线程
没有有独立的用户空间没有共享的用户空间:内核线程
4.linux进程状态
TASK_RUNNING 绪态/执行
TASK_INTERRUPTIBLE 阻塞(等待唤醒)
TASK_UNINTERRUPTIBLE 阻塞(大部分不可唤醒)
TASK_KILLABLE (致命信号)
TASK_TRACED(正在被调试)
TASK_DEAD(进程正在退出)
5.linux进程的调度
5.1.调度的策略
SCHED_NORMAL(SCHED_OTHER):普通的分时进程
SCHED_FIFO:先入先出的实时进程
SCHED_RR:时间片轮转的实时进程
SCHED_BATCH:批处理进程
SCHED_IDLE:只在系统空闲的时才能被调度执行的进程
正在CPU调用进程时优先调用实时进程,再调用普通进程
全部实时进程,先来先服务。
全部实时进程,时间片的轮转,分时运行
5.2.调度的时机
即schedule()何时被调用。有两种调用方式:主动式,被动式
主动式,进程暂停使用时,将进程的状态设置为阻塞
被动式,抢占式调度(用户态抢占和内核态抢占)
用户态抢占和内核态抢占通过进程发生的时间来决定的,
用户态抢占发生在以下情况:1.系统调用返回用户空间,2.从中断处理程序返回用户空间
用户态抢占缺陷:
当线程与进程一直运行在内核线程,就可以一直执行,直到时间消耗完毕,缺乏实时性。
改进:既支持用户态抢占及内核抢占。

5.3内核抢占:

A内核线程处理中断完成返回内核空间发生抢占。
不支持内核抢占情况四:
1.发生中断处理程序时
2.内核正在进行中断上下文的处理时,硬件中断返回前会执行软中断,此时任然处于中断上下文
3.进程持有自旋锁或者读写锁
4.内核正在执行scheduler
通过内核preempt_count来判断。
6.linux调度的步骤
.schedule函数工作流程如下
1.清理当前运行进程
2.选择下一个要运行的进程
3.设置新进程的运行环境
4.进程的切换。

转载地址:http://nvomb.baihongyu.com/

你可能感兴趣的文章
在Win2003中配置SNMP服务的网络安全(转)
查看>>
如何彻底保护你的网站不受RDS攻击的威胁(转)
查看>>
提高网站在Google中的排名——面向搜索引擎的网站设计(转)
查看>>
SQL Server 存储过程的经典分页(转)
查看>>
SMS基本概念和移动通信系统介绍(转)
查看>>
匿名FTP的安全设定(转)
查看>>
学习J2ME编程需要掌握的七种技术(转)
查看>>
DB2 UDB V8.1管理学习笔记(二)(转)
查看>>
IBM DB2 日常维护汇总(三)(转)
查看>>
怎样创建.NET Web Service(4)(转)
查看>>
Symbian OS 开发初级手册(转)
查看>>
限制只能中文输入的方法(转)
查看>>
MySQL进阶SELECT篇(转)
查看>>
SQL Server中死锁产生的原因及解决办法(转)
查看>>
南阳铁通推出宽带“网吧式”服务(转)
查看>>
共享池 shared pool
查看>>
autotrace该怎么用?那些选项是啥意思?
查看>>
Python(模块)思维导图
查看>>
MySQL 5.7 InnoDB引擎简介
查看>>
Oracle 基于其他表中的数据更新记录时空值的处理方法
查看>>