Linux期末总结
Linux内核学习总结
1.计算机是如何工作的?
存储程序计算机工作模型
X86汇编基础
汇编一个简单的C程序分析其汇编指令执行过程
2.操作系统是如何工作的?
三个法宝——存储程序计算机、函数调用堆栈、中断机制;
借助Linux内核部分源代码模拟存储程序计算机工作模型及时钟中断
在mykernel基础上构造一个简单的操作系统内核
3.构造一个简单的Linux系统MenuOS
Linux内核源代码简介
构造一个简单的Linux系统
跟踪调试Linux内核的启动过程
sched_init()进程调度初始化函数,函数内关键的初始化——对0号进程,即idle进程进行初始化;
rest_init()其他初始化函数,函数内将创建1号进程,即init进程;
内核的启动过程:
rest_init实际是start_kernel内核一启动的时候会一直存在,这个就叫0号进程;0号进程创建了1号进程kernel_init和其他服务线程。
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S
# 关于-s和-S选项的说明:
-S freeze CPU at startup (use ’c’ to start execution)
-s shorthand for -gdb tcp::1234 若不想使用1234端口,则可以使用-gdb tcp:xxxx来取代-s选项
gdb
(gdb)file linux-3.18.6/vmlinux # 在gdb界面中targe remote之前加载符号表
(gdb)target remote:1234 # 建立gdb和gdbserver之间的连接,按c 让qemu上的Linux继续运行
(gdb)break start_kernel # 断点的设置可在target remote之前,也可在后
4.扒开系统调用的三层皮(上)
(一)用户态、内核态和中断处理过程
(二)系统调用概述
系统调用概述和系统调用的三层皮
(三)使用库函数API和C代码中嵌入汇编代码触发同一个系统调用
使用库函数API获取系统当前时间
C代码中嵌入汇编代码的方法(复习)
使用C代码中嵌入汇编代码触发系统调用获取系统当前时间
5.扒开应用系统的三层皮(下)
(一)给MenuOS增加time和time-asm命令
(二)使用gdb跟踪系统调用内核函数sys_time
(三)系统调用在内核代码中的工作机制和初始化
1. 系统调用在内核代码中的工作机制和初始化
2. 简化后便于理解的system_call伪代码
3. 简单浏览system_call和iret之间的主要代码
set_system_trap_gate,设置系统陷阱门,即系统调用。
使用gdb跟踪
make rootfs:自动编译,生成根文件系统,自动启动.
(gdb)list 查看代码.
(gdb)s 单步调试进入函数体.
(gdb)n 单步调试不进入函数体.
给MenuOS增加time和time-asm命令、添加了fork
6.进程的描述和进程的创建
进程的描述
- 进程描述符task_struct数据结构(一)
- 进程描述符task_struct数据结构(二)
进程的创建
- 进程的创建概览及fork一个进程的用户态代码
- 理解进程创建过程复杂代码的方法
- 浏览进程创建过程相关的关键代码
- 创建的新进程是从哪里开始执行的?
- 使用gdb跟踪创建新进程的过程
操作系统的三大管理功能:进程管理、内存管理、文件系统;
PCB task_struct中:进程状态、进程打开的文件、进程优先级信息;
PID唯一的标识进程;
创建一个新进程在内核中的执行过程
1.使用系统调用clone、fork、vfork均可创建一个新进程,但都是通过调用do_fork来实现进程的创建;
2.复制父进程PCB--task_struct来创建一个新进程,要给新进程分配一个新的内核堆栈;
3.修改复制过来的进程数据,比如pid、进程链表等等执行copy_process和copy_thread
4.p->thread.sp = (unsigned long) childregs; //调度到子进程时的内核栈顶
p->thread.ip = (unsigned long) ret_from_fork; //调度到子进程时的第一条指令地址
7.可执行程序的装载
(一)预处理、编译、链接和目标文件的格式
1.可执行程序是怎么得来的
2.目标文件的格式ELF
3.静态链接的ELF可执行文件和进程的地址空间
(二)可执行程序、共享库和动态加载
1.装载可执行程序之前的工作
2.装载时动态链接和运行时动态链接应用举例
(三)可执行程序的装载
1.可执行程序的装载相关关键问题分析
2.sys_execve的内部处理过程
3.使用gdb跟踪sys_execve内核函数的处理过程
4.可执行程序的装载与庄生梦蝶的故事
5.浅析动态链接的可执行程序的装载
8.进程的切换和系统的一般执行过程
(一)进程切换的关键代码switch_to分析
1.进程进度与进程调度的时机分析
2.进程上下文切换相关代码分析
(二)Linux系统的一般执行过程
1.Linux系统的一般执行过程分析
2.Linux系统执行过程中的几个特殊情况
3.内核与舞女
(三)Linux系统架构和执行过程概览
1.Linux操作系统架构概览
2.最简单也是最复杂的操作——执行ls操作
3.从CPU和内存的角度看Linux系统的执行
(四)特殊情况
通过中断处理过程中的调度时机,用户态进程与内核线程之间互相切换和内核线程之间互相切换,与最一般的情况非常类似,只是内核线程运行过程中发生中断没有进程用户态和内核态的转换;
内核线程主动调用schedule(),只有进程上下文的切换,没有发生中断上下文的切换,与最一般的情况略简略;
创建子进程的系统调用在子进程中的执行起点及返回用户态,如fork;
加载一个新的可执行程序后返回到用户态的情况,如execve
每周学习情况汇总
第一周:http://www.cnblogs.com/20135105wangxc/p/5225876.html
第二周:http://www.cnblogs.com/20135105wangxc/p/5247948.html
第三周:http://www.cnblogs.com/20135105wangxc/p/5272081.html
第四周:http://www.cnblogs.com/20135105wangxc/p/5298136.html
第五周:http://www.cnblogs.com/20135105wangxc/p/5323204.html
第六周:http://www.cnblogs.com/20135105wangxc/p/5349065.html
第七周:http://www.cnblogs.com/20135105wangxc/p/5368736.html
第八周:http://www.cnblogs.com/20135105wangxc/p/5398216.html
王雪铖
原创作品转载请注明出处
《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
Linux期末总结的更多相关文章
- Linux期末复习题
版权声明: https://blog.csdn.net/u014483914/article/details/36622451 1.More和less命令的差别 More命令通经常使用 ...
- Linux 驱动开发
linux驱动开发总结(一) 基础性总结 1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备 2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装 3, ...
- Linux内核期末总结
20135316王剑桥<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC 1000029000 第一周 http://www.cn ...
- Linux内核分析 期末总结
Linux内核分析 期末总结 一.知识概要 1. 计算机是如何工作的 存储程序计算机工作模型:冯诺依曼体系结构 X86汇编基础 会变一个简单的C程序分析其汇编指令执行过程 2. 操作系统是如何工作的 ...
- 《Linux内核分析》期末总结
Linux内核设计期中总结 版权声明:本文为博主原创文章,未经博主允许不得转载. 前八周博客汇总及总结 Linux内核设计第一周——从汇编语言出发理解计算机工作原理 我们学习了汇编语言的基础知识,这一 ...
- LINUX内核分析期末总结
韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.课程总结 1 ...
- Linux内核分析——期末总结
Linux内核学习总结 首先非常感谢网易云课堂这个平台,让我能够在课下学习,课上加强,体会翻转课堂的乐趣.孟宁老师的课程循序渐进,虽然偶尔我学习地不是很透彻,但能够在后续的课程中进一步巩固学习,更加深 ...
- 期末总结:LINUX内核分析与设计期末总结
朱国庆原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一,心得体会 关于网上听课这 ...
- 网易云课堂-----Linux内核分析-----期末主观题
姚歌 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 下面是对8个课题的 ...
随机推荐
- mysql5.7如何修改密码以及密码如何忘记无密码登陆
今天买了一台阿里云服务器,Centos7.3系统,环境是LAMP.学生价9.8元是真的很实惠了.然后想修改一下mysql服务器的密码(mysql版本5.7),结果操作失误,密码给忘记了,导致新旧密码都 ...
- JDBC学习笔记之SQLException介绍
1. SQLException 的概述 当使用 JDBC 与数据源(在本文中的数据源表示我们实际使用的数据库)进行交互的时候遇见错误的时候,将会抛出名为 SQLException 的异常.一个 SQL ...
- 【BZOJ3529】数表
数表 Description 有一张 n*m 的数表,其第i行第j列(1<=i<=n,1<=j<=m)的数值为能同时整除 i和j的所有自然数之和.给定a,计算数表中不大于a的数 ...
- Excel中sumproduct函数的使用方法和用途
上表是公司人员,所属工段,年龄,工资等信息.现在要统计每个工段所有人员的工资总和. 从拆解工段开始.输入=SUMPRODUCT(($B$2:$B$9=A12)*($D$2:$D$9)); $B$2 ...
- 浅谈JEECG多数据源的使用
首先,简单的介绍下什么是JEECG.JEECG(J2EECode Generation)是一款基于代码生成器的免费开源的快速开发平台,使用JEECG可以简单快速地开发出企业级的Web应用系统.JEEC ...
- solidity return data和revert/require的reason string的获得
前言: 在使用solidity写智能合约的时候,会使用到revert和require来进行断言,比如: require(tokenOwner[tokenId] == 0x0,'this is not ...
- yum问题解决
错误信息1:There was a problem importing one of the Python modulesrequired to run yum. The error leading ...
- matlab slice
前言:在地球物理勘探,流体空间分布等多种场景中,定位空间点P(x,y,x)的物理属性值Q,并绘制三维空间分布图,对我们洞察空间场景有十分重要的意义. 1. 三维立体图的基本要件: 全空间网格化 网格节 ...
- 静态分析Android程序
快速定位Android程序的关键代码 1.通过apktool反编译apk文件,得到AndroidManifest.xml文件,可以得到程序用到的组建.配置.以及主Activity 2.信息反馈法(特殊 ...
- MySQL 误操作后如何快速恢复数据~!~!~
基本上每个跟数据库打交道的程序员(当然也可能是你同事)都会碰一个问题,MySQL误操作后如何快速回滚?比如,delete一张表,忘加限制条件,整张表没了.假如这还是线上环境核心业务数据,那这事就闹大了 ...