补交第三周作业

完成一个简单的时间片轮转多道程序内核
1.使用实验楼的虚拟机打开shell,用cd LinuxKernel/linux-3.9.4进入linux-3.9.4。
2.执行命令qemu -kernel arch/x86/boot/bzImage会发现弹出新的窗口,代表内核启动了。

执行mykernel代码

进入mykernel代码,可以看到mymain.cmyinterrupt.c

打开mymain.c代码如下:开始启动操作系统。

前面是头文件,然后有一个my_start_kernel()函数,该函数是整个操作系统的入口, 变量i不停的自加1,if循环是执行i每当加到1000000的整数倍的时候就打印出当前的i的值,我们也可以通过修改if的条件使打印加快或减慢

打开myinterrupt.c代码如下:

前面还是头文件,然后有一个my_timer_handler函数,里面只有一条prink的打印语句,每次时钟中断都调用这个printk()输出,所以屏幕会不停的有信息打印出来。

阅读教材3、5章

进程管理

1.进程就是处于执行期的程序。但进程并不仅仅局限于一段可执行程序代码。通常进程还要包含其他资源,像打开的文件,挂起的信号,内核内部数据,处理器状态,一个或多个具有内存映射的内存地址空间及一个或多个执行线程。
2.线程是在进程中活动的对象。每个线程都拥有一个独立的程序计数器、进程栈和一组进程寄存器。内核调度的对象不是进程而是线程。一个进程可以包含多个线程。但linux系统的线程实现并不特别区分进程和线程。
3.调用fork()系统的结果,该系统调用通过复制一个现有进程来创建一个全新的进程。fork()系统调用从内核返回两次:一次回到父进程,另一次回到新产生的子进程。调用exec()这组函数就可以创建新的地址空间,并把新的程序载入其中。

系统调用

1.一般情况下,应用程序通过在用户空间实现的应用的编程接口(API)而不是直接通过系统调用来编程。
2.要访问系统调用,通常通过C库中定义的系统调用来进行。系统调用还会通过一个long类型的返回值来表示成功或者错误。负的返回值表示错误,返回0通常表明成功。
3.Linux中每个系统调用都有一个系统调用号。通过这个独一无二大的号就可以关联系统调用。当用户空间的进程执行一个系统调用的时候,这个系统调用号就用来指明到底是要执行哪个系统调用;进程不会提及系统调用的名称。系统调用的列表存储在sys_call_table中。
4.Linux系统调用比其他许多操作系统执行要快。Linux很短的上下文切换时间是一个重要原因,进出内核都被优化的简洁高效。另外一个原因是系统调用处理程序和每个系统调用本身也都非常简洁。
5.内核驻留在受保护的地址空间上,所以用户空间的程序不能直接调用内核空间中的函数。通常通过软中断,触发一个异常促使系统切换到内核执行系统调用处理程序。在x86上预定义的软中断中断号是128.
在x86上,系统调用号是通过eax寄存器传递给内核的。
6.内核在执行系统调用的时候处于进程上下文。current指针指向当前任务,即引发系统调用的那个进程。
7.在进程上下文中,内核可以休眠并且可以被抢占。能够休眠说明系统调用可以使用内核提供的绝大部分功能。在进程上下文中能够内抢占表明,像用户空间内的进程一样,当前的进程同样可以被其他进程抢占。因为新的进程可以使用相同的系统调用,所以必须小心,保证系统调用是可重入的。
8.建立一个新的系统调用有利有弊,需谨慎使用。
9.常用的系统调用函数有fork、wait、getpid等。

第四周实验

一、静态库的测试实验

1.gcc -c *.c,-c为把.c文件生成.o文件
2.ar cr libmymath.a *.o,其中ar cr是生成静态库的语句,对于静态库开头要用lib+名字结尾再.a,把.o文件生成到libmymath.a里

  1. gcc main.c -L. lmymath,-L.表示要库依赖,-l表示是寻这个静态库

    4.运行结果

二、共享库的测试实验

1.使用 -fPIC 选项,会生成 PIC 代码。.so 要求为 PIC,以达到动态链接的目的,否则,无法实现动态链接
2.cp 是复制,复制libmymath.so到/lib文件中
3.之后同静态库命令一样执行

三、跟踪分析Linux内核的启动过程

使用实验楼的虚拟机打开shell,输入以下代码启动内核
cd LinuxKernel/
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img

使用gdb跟踪调试内核
输入代码qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S当前状态被冻结
再打开一个窗口,输入gdb,把Linux-3.18.6/vmLinux加载进去,连接到刚才启动的被冻结的Linux
输入file linux-3.18.6/vmlinux,target remote:1234,显示连接超时

四、遇到的问题:

1.在做动态库实验室的时候,会出现以下现象:

不知道问题所在,自己想的是是不是电脑配置太低,所以没有办法执行命令?所以用同学的电脑完成了共享库的实验。

2.在跟踪分析内核时,为什么会显示连接超时?之后输入break start_kernel断点的设置,为什么显示无法运行?

20179223《Linux内核原理与分析》第四周学习笔记的更多相关文章

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

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

  2. 20169211《Linux内核原理与分析》第四周作业

    20169211<Linux内核原理与分析>第四周作业内容列表 1.教材第3.5章节知识学习总结: 2.实验楼配套实验二实验报告: 1.<linux内核设计与实现>教材第3.5 ...

  3. 2019-2020-1 20199329《Linux内核原理与分析》第四周作业

    <Linux内核原理与分析>第四周作业 一.上周问题总结: 虚拟机环境缺少部分库文件 书本知识使用不够熟练 二.本周学习内容: 1.实验楼环境使用gdb跟踪调试内核 1.1 在该环境下输入 ...

  4. 2019-2020-1 20199328《Linux内核原理与分析》第四周作业

    <Linux内核原理与分析>第四周作业 步骤一 首先我们指定一个内核并指定内存根文件系统,这里的bzImage是vmLinux经过gzip压缩的内核,"b"表示&quo ...

  5. 20169212《Linux内核原理与分析》课程总结

    20169212<Linux内核原理与分析>课程总结 每周作业链接汇总 第一周作业:完成linux基础入门实验,了解一些基础的命令操作. 第二周作业:学习MOOC课程--计算机是如何工作的 ...

  6. 20169207《Linux内核原理及分析》第十三周作业

    第一周作业::对Linux的基本知识进行了了解,并对基本操作进行熟悉和应用. 第二周作业::了解了冯诺依曼体系结构.各种寄存器的功能和汇编指令的作用和功能. 第三周作业::这周主要了解了Linux系统 ...

  7. 《Linux内核原理与分析》教学进程

    目录 2019-2020-1 <Linux内核原理与分析>教学进程 考核方案 第一周: 第二周: 第三周: 第四周: 第五周 第六周 第七周: 第八周 第九周 第十周 第十一周: 第十二周 ...

  8. 20169212《Linux内核原理与分析》第二周作业

    <Linux内核原理与分析>第二周作业 这一周学习了MOOCLinux内核分析的第一讲,计算机是如何工作的?由于本科对相关知识的不熟悉,所以感觉有的知识理解起来了有一定的难度,不过多查查资 ...

  9. 20169210《Linux内核原理与分析》第二周作业

    <Linux内核原理与分析>第二周作业 本周作业分为两部分:第一部分为观看学习视频并完成实验楼实验一:第二部分为看<Linux内核设计与实现>1.2.18章并安装配置内核. 第 ...

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

    2018-2019-1 20189221 <Linux内核原理与分析>第九周作业 实验八 理理解进程调度时机跟踪分析进程调度与进程切换的过程 进程调度 进度调度时机: 1.中断处理过程(包 ...

随机推荐

  1. JS实现的base64加密、md5加密及sha1加密详解

    1.base64加密 在页面中引入base64.js文件,调用方法为: <!DOCTYPE HTML> <html> <head> <meta charset ...

  2. Thread的中断机制(interrupt),循环线程停止的方法

    一.中断原理 中断线程 线程的thread.interrupt()方法是中断线程,将会设置该线程的中断状态位,即设置为true,中断的结果线程是死亡.还是等待新的任务或是继续运行至下一步,就取决于这个 ...

  3. 【原创】Centos 7利用软件Raid搭建ISCSI过程

    测试机器安装了4块2T硬盘,一块320G硬盘,利用320G硬盘安装CentOS 7系统,在CentOS 7系统上利用4块2T硬盘组建Raid 0,再配置iSCSI存储.注意,本文中的RAID指的是软R ...

  4. 51nod-1670-打怪兽(递推/组合数学)

    1670 打怪兽  基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 lyk在玩一个叫做“打怪兽”的游戏.游戏的规则是这样的.lyk一开始会有一个初始 ...

  5. UVA-11374 Airport Express (dijkstra+枚举)

    题目大意:n个点,m条无向边,边权值为正,有k条特殊无向边,起止点和权值已知,求从起点到终点的边权值最小的路径,特殊边最多只能走一条. 题目分析:用两次dijkstra求出起点到任何一个点的最小权值, ...

  6. 神经网络总结(bp)

    一.从生物到计算机 神经细胞利用电-化学过程交换信号.输入信号来自另一些神经细胞.这些神经细胞的轴突末梢(也就是终端)和本神经细胞的树突相遇形成突触(synapse),信号就从树突上的突触进入本细胞. ...

  7. BZOJ 1005 [HNOI2008]明明的烦恼 ★(Prufer数列)

    题意 N个点,有些点有度数限制,问这些点可以构成几棵不同的树. 思路 [Prufer数列] Prufer数列是无根树的一种数列.在组合数学中,Prufer数列是由一个对于顶点标过号的树转化来的数列,点 ...

  8. Prism5.0开发人员指南内容(纯汉语版)

    Prism指南包含以下内容: 下载并安装Prism Prism5.0新内容 介绍 初始化应用程序 组件间的依赖管理 模块化应用程序开发 实现MVVM模式 进击的MVVM 组合式用户界面 导航 松耦合组 ...

  9. Week08《Java程序设计》第八次学习总结

    Week08<Java程序设计>第八次学习总结 1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 答: 2.书面作业 1. ArrayList代码分析 1.1 解 ...

  10. 记 fastjson泛型转对象 第一次可以正常转,第二次就变成JSONArray 问题

    在解析json数据的时候,在使用泛型对象的时候即: public class ResultMsgDto<E> implements Serializable { private stati ...