20169211《Linux内核原理与分析》第四周作业内容列表

1、教材第3、5章节知识学习总结;

2、实验楼配套实验二实验报告;

1、《linux内核设计与实现》教材第3、5章节知识阅读学习总结

教材第3章节主要讲述了进程管理相关的知识,包括什么是进程、进程描述符及任务结构、如何创建进程、linux中线程的实现方法以及如何终结进程等。

首先,印象最深的是如何创建新的进程。在听孟老师的《linux内核分析》的课程时,曾谈到过计算机的“三大法宝”:存储程序计算机、函数调用堆栈和中断机制。针对于存储程序计算机这个特性,说一下我的理解:程序是存放在外边磁盘中的文件,为使其运行于计算机内存中,通过CPU一系列的计算而最终得到我们想要的结果的话,需要为其创建进程。那么,创建进程可以通过调研exec()这组函数为其创建新的地址空间,并把新的程序载入其中。在现代linux内核中,通常使用fork()来创建进程,而fork()实际上是clone()系统调用的实现。最终程序通过exit()系统调用退出程序的执行,也就是终结进程的生命周期。为了通过程序设计语言来描述我们提出的进程理论,需要为其创建进程描述符和相应的数据结构,下边是实验楼代码中一个PCB结构的代码:

typedef struct PCB{
int pid;//进程描述符,唯一标识一个进程
volatile long state ;
char stack[KERNEL_STACK_SIZE] ;
struct Thread thread ;
unsigned long task_entry ;
struct PCB *next ;
} tPCB ;

其中,进程描述符中的状态域描述了进程的状态,系统中每个进程都必然处于五中状态中的一种:运行态、可中断、不可中断、跟踪态、停止。

另外,就是线程机制在现代linux内核中的实现。从内核的角度来说,linux把所有的线程都当做进程来实现。它仅被视为一个与其他进程共享某些资源的进程,可以通过clone()系统调用来创建线程。

教材第5章节主要讲述了系统调用的相关知识。为了与操作系统内核通信,应用最终需要通过系统调用来进行,而通常情况下是使用C库中定义的函数调用来进行。用户程序通过包含标准头文件并和C库连接,就可以使用系统调用。另外,linux本身提供了一些宏,用于直接对系统调用进行访问。它会设置好寄存器并调用陷入指令。例如书中给出的例子,open()系统调用的定义是:

long open(const char *filename, int flags, int mode)

不靠C库的支持,而是直接通过系统调用的宏的形式:

#define NR_open 5
_syscall3(long, open, const char*, filename, int, flags, int, mode)

这样,应用程序就可以直接使用open()了。

2、实验楼《linux内核分析》实验二实验操作过程报告

这个实验主要涉及到两个c源程序,分别是mymain.c和myinterrupt.c。通过编写这两个源程序来实现一个简单的时间片轮转多道程序内核代码。下边,分别给出这两个源程序的代码:

mymain.c

...	//硬件初始化操作所引入的头文件
void _init my_start_kernel(void){
int i=0 ;
while(1){
i++ ;
if(i%100000 == 0)
printk(KERN_NOTICE "my_start_kernel here %d \n", i) ;
}
}

myinterrupt.c

#define CREATE_TRACE_POINTS
#include <trace/events/timer.h>
/*
*Called by timer interrupt.
*/
void my_timer_handler(void){
printk(KERN_NOTICE "\n>>>>>>>>>>>>>>>>>>>");
}

编写完成之后,执行mystart_kernel中的代码,执行结果如下:

分析如上程序,通过

qemu -kernel arch/x86/boot/bzImage

从qemu窗口中可以看到my_start_kernel正在执行,同时my_timer_handle时钟中断处理程序在周期性的执行。

20169211《Linux内核原理与分析》第四周作业的更多相关文章

  1. 2019-2020-1 20199303<Linux内核原理与分析>第二周作业

    2019-2020-1 20199303第二周作业 1.汇编与寄存器的学习 寄存器是中央处理器内的组成部份.寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令.数据和位址.在中央处理器的控制部件中 ...

  2. 20169219 linux内核原理与分析第二周作业

    "linux内核分析"的第一讲主要讲了计算机的体系结构,和各寄存器之间对数据的处理过程. 通用寄存器 AX:累加器 BX:基地址寄存器 CX:计数寄存器 DX:数据寄存器 BP:堆 ...

  3. 2019-2020-1 20199314 <Linux内核原理与分析>第二周作业

    1.基础学习内容 1.1 冯诺依曼体系结构 计算机由控制器.运算器.存储器.输入设备.输出设备五部分组成. 1.1.1 冯诺依曼计算机特点 (1)采用存储程序方式,指令和数据不加区别混合存储在同一个存 ...

  4. 20169219linux 内核原理与分析第四周作业

    系统调用 系统调用是用户空间访问内核的唯一手段:除异常和陷入外,它们是内核唯一的合法入口. 一般情况下,应用程序通过在用户空间实现的应用编程接口(API)而不是直接通过系统调用来编程. 要访问系统调用 ...

  5. Linux内核原理与分析-第一周作业

    本科期间,学校开设过linux相关的课程,当时的学习方式主要以课堂听授为主.虽然老师也提供了相关的学习教材跟参考材料,但是整体学下来感觉收获并不是太大,现在回想起来,主要还是由于自己课下没有及时动手实 ...

  6. 2019-2020-1 20199314 <Linux内核原理与分析>第一周作业

    前言 本周对实验楼的Linux基础入门进行了学习,目前学习到实验九完成到挑战二. 学习和实验内容 快速学习了Linux系统的发展历程及其简介,学习了下的变量.用户权限管理.文件打包及压缩.常用命令的和 ...

  7. Linux内核原理与分析-第二周作业

    写之前回看了一遍秒速五厘米:如果

  8. 2018-2019-1 20189221《Linux内核原理与分析》第一周作业

    Linux内核原理与分析 - 第一周作业 实验1 Linux系统简介 Linux历史 1991 年 10 月,Linus Torvalds想在自己的电脑上运行UNIX,可是 UNIX 的商业版本非常昂 ...

  9. 2018-2019-1 20189221《Linux内核原理与分析》第四周作业

    2018-2019-1 20189221<Linux内核原理与分析>第四周作业 教材学习:<庖丁解牛Linux内核分析> 第 3 章 MenuOS的构造 计算机三大法宝:存储程 ...

随机推荐

  1. 平衡树【Treap】

    平衡树的板题,用Treap实现. 具体参见注释,写的很详细了,包括了原理,实现以及注意事项 蒟蒻写个注释板子写了两天,太弱了QAQ 感谢niiick指导 Code #include<iostre ...

  2. Crash Consistency : FSCK and Journaling

    现在开始今天的第三篇博客的撰写,不能扯淡了,好多任务啊.但是还是忍不住吐槽一下,之前选择这篇文章纯属是个意外,我把Crash看做了Cache,唉,要不然也就不用写这篇文章了. 1. 这篇博客讲什么? ...

  3. 【BZOJ】1023: [SHOI2008]cactus仙人掌图 静态仙人掌(DFS树)

    [题意]给定仙人掌图(每条边至多在一个简单环上),求直径(最长的点对最短路径).n<=50000,m<=10^7. [算法]DFS树处理仙人掌 [题解]参考:仙人掌相关问题的处理方法(未完 ...

  4. 使用JSON Web Token设计单点登录系统

    用户认证八步走 所谓用户认证(Authentication),就是让用户登录,并且在接下来的一段时间内让用户访问网站时可以使用其账户,而不需要再次登录的机制. 小知识:可别把用户认证和用户授权(Aut ...

  5. [NOIP2003]栈 题解(卡特兰数)

    [NOIP2003]栈 Description 宁宁考虑的是这样一个问题:一个操作数序列,从1,2,一直到n(图示为1到3的情况),栈A的深度大于n. 现在可以进行两种操作: 1.将一个数,从操作数序 ...

  6. 【leetcode 简单】第十三题 最大子序和

    给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 ...

  7. leetcode.C.4. Median of Two Sorted Arrays

    4. Median of Two Sorted Arrays 这应该是最简单最慢的方法了,因为本身为有序,所以比较后排序再得到中位数. double findMedianSortedArrays(in ...

  8. zedboard学习记录.2.PS+PL 流水灯与uart

    1.建立一个工程. 硬件设计 2.IP integrator -> create block desgin;Run Block Automation. 3.add IP -> AXI GP ...

  9. Linux内存高,触发oom-killer问题解决

    最近遇到两起Linux的内存问题,其一是触发了oom-killer导致系统挂 1. 首先确认该系统的版本是32位 ? #uname -a Linux alarm 2.6.9-67.ELsmp #1 S ...

  10. $NTT$(快速数论变换)

    - 概念引入 - 阶 对于$p \in N_+$且$(a, \ p) = 1$,满足$a^r \equiv 1 (mod \ p)$的最小的非负$r$为$a$模$p$意义下的阶,记作$\delta_p ...