Linux内核开发学习笔记(二)

Linux内核开发学习笔记(二)

学习视频资源链接:https://www.bilibili.com/video/BV1mZ4y1s7a5?p=7
代码资源链接:http://wwww.kerneltravel.net/journal/ii/index.htm

3.内存寻址

CPU、MMU、内存和磁盘间进行交互。
MMU的工作原理:虚拟地址->线性地址(段机制)->物理地址(分页机制)。

(1)段机制(段描述符表(段表))

段描述符表:由段号,基地址,界限,属性组成。
其中,线性地址=段的起始地址+偏移量(由于LINUX内核以分页机制为主,因此,LINUX将段的起始地址设置为0,则保留了段机制,但实际使用了分页机制)

  • 段号:虚拟地址空间段的标号;
  • 基地址:线性地址空间段的起始地址;

(2)分页机制

(3) 代码调试
调试实验代码SagaLinux,实际使用内存寻址相关代码。
存在的问题:

  • 没有安装汇编库,安装即可在这里插入图片描述
  • 64位系统编译32位的目标文件,在这里插入图片描述

4.Linux中的进程

(1)概述
调用fork系统调用创建进程,使用ps -ejH命令查看进程的家族关系。

Linux内核中进程的描述结构体:task_struct,主要包含了:状态信息(进程动态转换);亲属信息(父子关系);标识符(表示不同进程);进程间的通信关系;时间和定时器信息(CPU生命周期相关信息);调度信息(进程优先级和调度策略);文件系统信息(记录进程使用文件系统情况);虚拟内存信息(描述进程拥有的地址空间);处理器环境信息(进程的执行环境,例如寄存器、堆栈)
Linux进程状态及转换关系图
在这里插入图片描述

该图来源于网络

进程的描述结构体 :存放于内核栈的堆栈寄存器,作为数据结构thread_info的第一个字段,占用8KB内存。优点:(1)可用过内核栈指针,快速得到描述结构体的起始地址;(2)避免创建进程时动态分配额外的内存。
(Linux为表示当前正在运行的进程,定义了一个current宏,可获得进程的相关信息)

(2)进程创建
Linux中将进程、线程、内核线程等均使用task_struct结构体表示,在内核中均通过do_fork()分别创建。
在这里插入图片描述

图片来源于课程链接

do_fork()代码执行流程
(1)调用copy_process() 复制父进程的进程描述结构体;
(2)确定子进程的PID;
(3)根据CLONE_STOPPED标志位,阻塞进程 or 置为就绪态,并压入就绪队列;
(4)采用vfork()创建进程,会阻塞父进程(因为vfork不会复制父进程的资源,而是共享父进程的内存,因此为了保证多进程的安全性,子进程先执行)。

copy_process()代码执行流程:(为子进程创建父进程的进程描述结构体的副本)
(1)检查标志变量合法性;
(2)dup_task_struct();
(3)检查资源限制;
(4)初始化task_struct中的字段;
(5)Sched_fork();
(6)复制或共享父进程的资源

  • copy_semundo()
  • copy_files()
  • copy_fs()
  • copy_sighand()
  • copy_singal()
  • copy_mm()
  • copy_namespace()
  • copy_thread()

(7)设置PID,进程关系等。

进程的生命周期:exec()、exit()、wait()

(3)进程调度
基本的调度模型
在这里插入图片描述

图片来源课程视频

线程调度的构成:就绪队列(场所)、调度算法(核心)、进程的切换(操作)、时钟中断(驱动力,ps:针对CPU时间片的调度方式)

就绪队列:双向循环链表
调度算法

  • 进程优先级(用户空间:普通优先级,调度优先级,内核空间:动态优先级,静态优先级,归一化优先级和实时优先级)
  • 调度复杂度:O(n) ------- 一个全局就绪队列
             O(1) ------ 每一个CPU均拥有一个就绪队列,即就绪进程首先通过负载均衡挂入各个CPU的                     就绪队列中,然后由主调度器和周期调度器进行调度。思想:单个链表->不同优先                   级的进程挂入到不同的就绪队列中

性能需求:(1)对于分时进程,采用公平调度;(2)快速的进程响应时间;(3)高吞吐量;(4)功耗低。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值