实验课程
文章平均质量分 61
zhaolianxun1987
这个作者很懒,什么都没留下…
展开
-
第六课 linux下进程描述与进程创建
赵连讯 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 本次实验课程内容和文章的题目是一致的,包括进程如何描述和进程的创建过程。 在实验中需要我们跟踪fork系统调用过程来验证上述所有的分析。分析task_struct在操作系统下,对一个进程管理,使用结构体来表示一个进程叫做pcb,原创 2016-04-03 11:06:41 · 1093 阅读 · 0 评论 -
第一讲数据结构(2)
什么是数据结构呢?他的概念包括如下三个方面: 数据对象在计算机中的组织方式。包括逻辑组织方式和物理组织方式。物理组织方式就是实际的数据对象以何种方式存储在物理内存中;逻辑组织方式是指数据对象之间的逻辑关系。比如,以书为例子。线性结构下,一个ID代表一本书,是一对一的关系。图的结构,则一个类别对应了很多书。 只有数据对象还不行,我们还要可以对数据对象进行操作。那么这些操作也应当数据数据结构的一部分。原创 2016-05-18 22:25:20 · 337 阅读 · 0 评论 -
第八课 linux系统概览(3)
操作系统组成包括:内核和外层程序 目的:与硬件交互,cpu是关键 与用户程序提供执行环境ls命令分析 ls输入 shell程序分析ls 调用系统调用fork,在fork中执行execlv中执行ls的实现。从系统调用返回将会返回到可执行程序的入口函数中或者动态库函数的入口。如何正确的返回将会执行eip中的值。 shell和ls同时执行将可能发生进程调度等等。扩展孟宁老师在开始阶段提高存储程原创 2016-04-17 00:18:57 · 449 阅读 · 0 评论 -
第八课 linux一般执行过程(2)
进程切换的一般场景分析当前linux系统中正在运行用户态进程X,需要切换到用户态进程Y的时候: 1.用户态进程X正在运行 2.运行的过程当中,发生了中断。中断可以是硬件中断,比如来自了外部的gpio的中断,可以是时钟中断,可以是系统调用。或者可能是异常发生,可以是缺页异常。缺页异常肯定是发生在内核中的。但是此时仍然是当前的进程,我们理解为是当前进程的内核态。在内核态中发生了中断行为。 但是我们原创 2016-04-16 23:42:07 · 311 阅读 · 0 评论 -
第八课 进程调度过程(1)
schedule进程调度的关键函数是schedule函数,函数原型如下:asmlinkage __visible void __sched schedule(void) { struct task_struct *tsk = current; sched_submit_work(tsk); __schedule(); }当进程需要上下文切换的时候,此函数就会被执行。真正的函数实原创 2016-04-16 22:16:07 · 492 阅读 · 0 评论 -
linux内核学习总结
赵连讯 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ”课程体会在linux内核分析课程上,老师讲解的课程内容主要是: 目标是为了讲解linux中如何运行可执行程序的,那么需要将可执行程序加载到内核中去,加载后为了运行,必须为这个可执行程序创建一个新的进程。由此,涉及到可执行程序的原创 2016-04-25 21:42:39 · 325 阅读 · 0 评论 -
第二课 函数调用
三大法宝计算机是如何工作的呢?这里有三大法宝。他们是什么呢?第一个是存储程序计算机,第二个是函数调用堆栈,第三个是中断机制。 存储程序计算机的决定了程序运行了基本方式。堆栈堆栈机制是高级语言得以运行的基础。我们这里主要讲的是栈。堆栈是C语言运行时,必须的一个记录调用路径和参数的空间。对堆栈的使用,是由编译器完成的。所以不同的编译器可能实现堆栈时,实现的方式是不同的。所以我们在编译相同的代码时,使用原创 2016-04-29 21:26:30 · 324 阅读 · 0 评论 -
第三课 熟悉内核源代码
linux源代码目录结构为了熟悉操作系统,我们首先查看linux的源代码目录结构 arch是各种架构的芯片的总目录 进入ls后,可以进一步的看到,我们常见的芯片架构。比如我们正在学习的x86的芯片架构,常见的嵌入式的控制芯片arm架构的芯片,mips的架构芯片。 boot目录是用来生成可执行文件的目录。 我们编译x86架构的内核后,生成的镜像文件bzImage就是在这个目录下。 includ原创 2016-04-29 21:54:09 · 370 阅读 · 0 评论 -
第四课 初识系统调用
赵连讯 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ” 本次课的名称:扒开系统调用的三层皮(上) 我将它理解为初步识别系统调用。系统调用系统调用的实现的实质是软中断,而不是简单的函数调用。为什么这么做呢? 系统的调用的意义如下: 把用户从底层的硬件编程中解放出来(不必关注硬件原创 2016-04-29 22:22:39 · 369 阅读 · 0 评论 -
第七课 程序的加载(5)
gdb的实验跟踪过称: 查看hello的入口地址:readelf -h hello输出图片为: 他的入口地址为 0x8048d0a使用dgb跟踪start_kernel函数的时候,指明了入参中new_ip值为: 由跟踪值和分析值可知两者是一致的。原创 2016-04-10 16:33:13 · 364 阅读 · 0 评论 -
第一讲 计算机工作原理
赵连讯 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ” 本课程是后来补充进来的,因为错过了提交时间。 冯诺依曼体系结构 为了更好的讲清楚计算机的工作原理,老师首先提出了冯诺依曼体系结构这个概念。 从网上总结了部分内容。与冯诺依曼体系结构相对的概念是哈佛体系结原创 2016-04-26 23:05:10 · 635 阅读 · 2 评论 -
第七课 程序的装载(4)
本文主要写实验内容源文件创建hello.c,文件内容如下:#include <stdio.h>int main(int argc,char *argv[]) { printf("hello world!\n"); return 0; } 预编译,命令:gcc -E -o hello.cpp hello.c -m32生成hello.cpp,在hello.cpp中增加了头文件的说明,内容原创 2016-04-10 15:02:25 · 321 阅读 · 0 评论 -
第七课 可执行程序的装载(2)
可执行程序的装载之前的工作 通过shell程序启动一个可执行程序,shell程序到底做了什么?在执行exec调用可执行程序之前,shell要做哪些工作? 举个例子: ls -l /usr/bin 实际上shell调用了可执行程序ls。-l 和/usr/bin是ls程序的入口参数。shell命令将会调用exec函数并把参数传递给可执行程序的main函数。int execve(const cha原创 2016-04-09 21:59:06 · 411 阅读 · 0 评论 -
第七课 可执行程序的装载(3)
在课程中,老师讲解load_elf_binary函数的时候,elf文件加载位置总是内存中的位置为0x0804 0000的固定位置上。动态链接在load_elf_binary中如果是动态链接时:if (elf_interpreter) { unsigned long interp_map_addr = 0; elf_entry = load_elf_interp(&loc原创 2016-04-10 00:05:54 · 270 阅读 · 0 评论 -
第七课 可执行程序的装载(1)
可执行文件格式在linux下的可执行文件的格式是ELF文件格式,与windows下常见的PE格式是不同的文件类型。 ELF文件是指可执行的可链接的文件。常见的.o文件或者可执行文件都可以是这种文件格式,但是他们又有不同,下面将查看分析他们的不同之处。 可重定位的文件 可重定位的文件就是我们常见的*.o目标文件,他包含一段代码和一段数据。用来生成可执行文件或者库文件。这比较好理解。 可执行的文件原创 2016-04-09 18:36:04 · 321 阅读 · 0 评论 -
第五课-系统调用跟踪
linux内核跟踪原创 2016-03-26 17:45:21 · 437 阅读 · 0 评论 -
第一讲算法(2)
什么算法? 有限的指令集。一堆指令集合来做一些事情。 算法一定是在有限步骤之后,要终止。 可以有输入或者无输入,但是必须有输出。 每一条指令都是明确的选择排序算法的伪码描述: void SelectionSort(int List[],int N) { for(i = 0;i < N;i++) { 从List[i]到List[N-1]找到最小值,并将其位置存储到一个变原创 2016-05-18 23:17:29 · 266 阅读 · 0 评论