2017-2018-1 20179205《Linux内核原理与设计》第三周作业
《Linux内核原理与分析》第三周作业
教材学习总结
第三章 进程管理
进程是Unix操作系统抽象概念中最基本的一种,是正在执行的程序代码的实时结果;线程,是在进程中活动的对象。而Linux实现线程的机制非常独特,从内核的角度来说,它并没有线程的概念。Linux把所有的线程都当作进程来实现。在进程的创建中,Unix分解到两个单独的函数中去执行:fork()和exec(),Linux的fork()使用写时拷贝(copy-on-write)页实现。最后,内核释放它所占有的资源,在进程调用exit(),进程终结。
第五章 系统调用
系统调用在用户空间进程和硬件设备之间添加了一个中间层,为用户空间提供了一种硬件的抽象借口,系统调用保证了系统的稳定和安全。应用程序通过在用户空间实现的应用编程接口(API)而不是直接通过系统调用来编程,因为应用程序使用的这种编程接口实际上并不需要和内核提供的系统调用对应。要访问系统调用(syscall),通常通过C库中定义的函数调用来进行。在Linux中,每个系统调用被赋予一个独一无二的系统调用号,来关联系统调用。在参数验证中,为了向用户空间读取数据,内核提供了copy_from_user();为了从用户空间读取数据,内核提供了copy_from_user(),同样都需要三个参数。最后一项检查针对是否有合法权限,调用者可以使用capable()函数来检查是否有权能对指定的资源进行操作,如果返回非0值,调用者就有权进行操作,返回0则无权操作。在系统调用上下文中,内核在执行系统调用的时候处于新城上下文,current指针指向当前任务。通常,系统调用靠C库支持。用户程序通过包含标准头文件并和C库链接,就可以使用系统调用。
视频学习总结
计算机工作的三大法宝:
存储结构计算机、函数调用堆栈和中断机制
堆栈相关的寄存器
-esp 堆栈指针,指向栈顶
-ebp 基址指针,指向指针
-push 栈顶地址减少4个字节(32位)
-pop 栈顶地址增加4个字节(由高地址向低地址增加)
其他关键寄存器
-cs:eip: 总是指向下一条的指令地址
call:将当前的cs:eip的值压入栈顶,cs:eip指向调用函数的入口地址
ret:从栈顶弹出来原来保存子啊这里的cs:eip的值,放入cs:eip中
深入理解函数调用堆栈的工作机制:
//建立被调用者函数的堆栈框架
push %ebp
movl %esp,%ebp
//被调用者函数体
//do sth
...
//拆除被调用者函数的堆栈框架
movl %ebp, %esp
popl %ebp
ret
C代码中嵌入汇编代码
内嵌汇编语法
asm(
汇编语句模板:
输出部分:
输入部分);
格式为:
asm("statements":output_regs:input_regs:clobbered_regs);
实验操作:
使用实验楼的虚拟机打开shell,通过cd LinuxKernel/linux-3.9.4
qemu -Kernel arch/x86/boot/bzImage 打开程序执行结果:

之后通过cd mykernel 可以看到qemu窗口输出的内容的myinterrupt.c

以及mymain.c

简单的操作系统内核源代码分析
在mykernel基础上构造一个简单的操作系统内核
struct Thread { //Thread 用来储存ip和sp
unsigned long ip;
unsigned long sp;
};
typedef struct PCB{
int pid; //进程的id号
volatile long state; //进程的状态
char stack[KERNEL_STACK_SIZE]; //内核堆栈
struct Thread thread; //Thread 结构体
unsigned long task_entry; //进程的起始入口
struct PCB *next; //指向下一个进程的指针
}tPCB;
void my_schedule(void); //函数执行的调度器
2017-2018-1 20179205《Linux内核原理与设计》第三周作业的更多相关文章
- 2017-2018-1 20179205《Linux内核原理与设计》第九周作业
<Linux内核原理与设计>第九周作业 视频学习及代码分析 一.进程调度时机与进程的切换 不同类型的进程有不同的调度需求,第一种分类:I/O-bound 会频繁的进程I/O,通常会花费很多 ...
- 2017-2018-1 20179205《Linux内核原理与设计》第二周作业
<Linux内核原理与分析>第二周作业 本周视频学习情况: 通过孟老师的视频教程,大致对风诺依曼体系结构有了一个初步的认识,视频从硬件角度和程序员角度对CPU和Main Memory(内存 ...
- 20169212《Linux内核原理与分析》第二周作业
<Linux内核原理与分析>第二周作业 这一周学习了MOOCLinux内核分析的第一讲,计算机是如何工作的?由于本科对相关知识的不熟悉,所以感觉有的知识理解起来了有一定的难度,不过多查查资 ...
- 20169210《Linux内核原理与分析》第二周作业
<Linux内核原理与分析>第二周作业 本周作业分为两部分:第一部分为观看学习视频并完成实验楼实验一:第二部分为看<Linux内核设计与实现>1.2.18章并安装配置内核. 第 ...
- 2018-2019-1 20189221 《Linux内核原理与分析》第九周作业
2018-2019-1 20189221 <Linux内核原理与分析>第九周作业 实验八 理理解进程调度时机跟踪分析进程调度与进程切换的过程 进程调度 进度调度时机: 1.中断处理过程(包 ...
- 2017-2018-1 20179215《Linux内核原理与分析》第二周作业
20179215<Linux内核原理与分析>第二周作业 这一周主要了解了计算机是如何工作的,包括现在存储程序计算机的工作模型.X86汇编指令包括几种内存地址的寻址方式和push.pop.c ...
- 2019-2020-1 20199329《Linux内核原理与分析》第九周作业
<Linux内核原理与分析>第九周作业 一.本周内容概述: 阐释linux操作系统的整体构架 理解linux系统的一般执行过程和进程调度的时机 理解linux系统的中断和进程上下文切换 二 ...
- 2019-2020-1 20199329《Linux内核原理与分析》第二周作业
<Linux内核原理与分析>第二周作业 一.上周问题总结: 未能及时整理笔记 Linux还需要多用 markdown格式不熟练 发布博客时间超过规定期限 二.本周学习内容: <庖丁解 ...
- 2019-2020-1 20209313《Linux内核原理与分析》第二周作业
2019-2020-1 20209313<Linux内核原理与分析>第二周作业 零.总结 阐明自己对"计算机是如何工作的"理解. 一.myod 步骤 复习c文件处理内容 ...
- 2017-2018-1 20179205《Linux内核原理与设计》第四周作业
<Linux内核原理与分析> 视频学习及实验操作 Linux内核源代码 视频中提到了三个我们要重点专注的目录下的代码,一个是arch目录下的x86,支持不同cpu体系架构的源代码:第二个是 ...
随机推荐
- 整理下本周工作中遇到的疑问;uid/euid/suid;docker镜像管理
1.系统中的父子进程关系,以及docker是如何处理的这种父子进程关系,线上问题发现,子进程长时间得不到退出. 2.调用system系统调用发生了啥事情,发现大量的页表拷贝. 3.通过shell命令通 ...
- react-event-pooling
react-event-pooling 事件池 https://codesandbox.io/s/3xp4y9zp7q https://reactjs.org/docs/events.html#eve ...
- Extensions disabled by Chrome
Extensions disabled by Chrome https://support.google.com/chrome_webstore/answer/2811969 https://supp ...
- java计算某日期之后的日期
public static void main(String[] args) { // 时间表示格式可以改变,yyyyMMdd需要写例如20160523这种形式的时间 SimpleDateFormat ...
- P2587 [ZJOI2008]泡泡堂
题目描述 第XXXX届NOI期间,为了加强各省选手之间的交流,组委会决定组织一场省际电子竞技大赛,每一个省的代表队由n名选手组成,比赛的项目是老少咸宜的网络游戏泡泡堂.每一场比赛前,对阵双方的教练向组 ...
- Codeforces Gym 101142 C. CodeCoder vs TopForces(思维+图论)
题意: 每个人有两个积分CC和TF 第i个人能战胜第j个人的条件满足下面两个条件中的一个即可 1.CCi > CCj 或 TFi > TFj 2.i能战胜k,k能战胜j. 题解: 先按CC ...
- CentOS 双网卡绑定实现平衡负载
绑定两块网卡主要为了解决网卡故障.负载均衡等问题. 1.在vm加一块网卡,登录后检查网卡是否识别. 分别用ip addr和nmcli查看网卡的情况 [root@bigdata-senior01 ~]# ...
- CentOS 设置环境变量
1. 查看环境变量,echo 命令用于在终端输出字符串或变量提取后的值,格式为“echo [字符串 | $变量]” echo $PATH /usr/local/bin:/usr/bin:/usr/lo ...
- [洛谷P5166]xtq的口令
题目大意:给出一张有向图,保证任何时候边都是从编号大的向编号小连.两个操作: $1\;l\;r:$表示若编号在区间$[l,r]$内的点被染色了,问至少还需要染多少个点才可以使得整张图被染色.一个点会被 ...
- 【以前的空间】BZOJ2733[HNOI2012]永无乡
启发式合并?! 似乎当时写并查集的时候就有看到过类似于把小并查集并到大并查集上的说法,原来这就是启发式…… 具体做法就是把小树里面的一个个拿出来,然后加到大树里面去(裸的不敢相信) const max ...