2018-2019-1 20189208《Linux内核原理与分析》第九周作业

活动

main函数编译有问题,div 函数和系统中某个函数重名,浮点输出有问题,scanf也有问题

修改如下

scanf_s("%d %d", &a, &b);
printf("div:%lf\n", div1(a, b));

整体代码如下

#include "pch.h"
#include <iostream>
#include "../Staticlibtest/head.h"
int main(void)
{
int a, b;
printf("enter two numbers:");
scanf_s("%d %d", &a, &b);
printf("add:%d\n", add(a, b));
printf("sub:%d\n", sub(a, b));
printf("mul:%d\n", mul(a, b));
printf("div:%lf\n", div1(a, b));
return 0;
}

知识点

本章研究进程调度时机、过程。

时机:

1.中断和进程调度的区别:中断不改变进程;进程调度是中断之后,切换进程。

2.中断类型:

硬中断:高电平-中断;

软中断(异常):故障、退出、陷阱;

3.schedule调用:

进程主动调用:阻塞系统调用进程调用schedule函数;

松散调用:内核代码随时调用,need_resched标记;

4.上下文

用户空间-用户进程上下文

内核空间-进程上下文

内核空间-中断上下文

5.进程调度时机=调用schedule函数的时机:

内核主动→schedule

中断→用户空间

6.调度策略:算法的目的资源利用效率最高/响应最即时。

7.调度算法:实现调度策略的算法。

8.进程分类方法

资源占用:I/O消耗型进程、处理器消耗型进程;

交互类型:交互式进程、批处理进程、实实时进程;

9.实施进程(_FIFO、_RR)>普通进程(CFS)

10.CFS:交互式进程响应较好,周期=进程数占用时间

理论运行时间=调度周期
权重

11.每次调度时选择最小vruntime的进程

12.时钟中断周期=10ms

13.linux传统优先级与权重的转换关系是经验值

14.进程切换=任务切换=进程上下文切换:切换全局目录→切换内核态堆栈和硬件上下文。

15.进程上下文:用户地址空间、控制信息、硬件上下文;

16.进程切换寄存器器:CR3、ESP寄存器、EIP寄存器及其他寄存器;

17.Linux系统运行过程:

用户态进程X→中断→保存现场→schedule 上下文切换→用户态Y→restore_all→iret箭头用户态进程Y

18.进程

2018-2019-1 20189208《Linux内核原理与分析》第九周作业

19.进程上下文切换相关代码分析pre→next

2018-2019-1 20189208《Linux内核原理与分析》第九周作业

中断保存硬件上下文的方法:保存现场、恢复现场

进程上下文的切换保存硬件上下文:switch_to宏

20.操作系统整体架构

2018-2019-1 20189208《Linux内核原理与分析》第九周作业

22.进程占用的内存在3G以上属于内核态,所有进程共享。内核就像出租车,选择进程运行,没有进程就空跑。

实验

switch_to 因宏定义,无法跟踪,设置断点失败。

实验过程如下

2018-2019-1 20189208《Linux内核原理与分析》第九周作业

2018-2019-1 20189208《Linux内核原理与分析》第九周作业

2018-2019-1 20189208《Linux内核原理与分析》第九周作业

2018-2019-1 20189208《Linux内核原理与分析》第九周作业

2018-2019-1 20189208《Linux内核原理与分析》第九周作业

2018-2019-1 20189208《Linux内核原理与分析》第九周作业

2018-2019-1 20189208《Linux内核原理与分析》第九周作业

上一篇:jQuery Ajax 使用 ($.ajax、$.post、$.get)


下一篇:selenium自动化之鼠标操作