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.扒开系统调用的三层皮(上)

(一)用户态、内核态和中断处理过程

(二)系统调用概述

系统调用概述和系统调用的三层皮

(三)使用库函数APIC代码中嵌入汇编代码触发同一个系统调用

使用库函数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.进程的描述和进程的创建

进程的描述

  1. 进程描述符task_struct数据结构(一)
  2. 进程描述符task_struct数据结构(二)

进程的创建

  1. 进程的创建概览及fork一个进程的用户态代码
  2. 理解进程创建过程复杂代码的方法
  3. 浏览进程创建过程相关的关键代码
  4. 创建的新进程是从哪里开始执行的?
  5. 使用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期末总结的更多相关文章

  1. Linux期末复习题

    版权声明: https://blog.csdn.net/u014483914/article/details/36622451 1.More和less命令的差别         More命令通经常使用 ...

  2. Linux 驱动开发

    linux驱动开发总结(一) 基础性总结 1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备 2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装 3, ...

  3. Linux内核期末总结

    20135316王剑桥<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC 1000029000 第一周 http://www.cn ...

  4. Linux内核分析 期末总结

    Linux内核分析 期末总结 一.知识概要 1. 计算机是如何工作的 存储程序计算机工作模型:冯诺依曼体系结构 X86汇编基础 会变一个简单的C程序分析其汇编指令执行过程 2. 操作系统是如何工作的 ...

  5. 《Linux内核分析》期末总结

    Linux内核设计期中总结 版权声明:本文为博主原创文章,未经博主允许不得转载. 前八周博客汇总及总结 Linux内核设计第一周——从汇编语言出发理解计算机工作原理 我们学习了汇编语言的基础知识,这一 ...

  6. LINUX内核分析期末总结

    韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.课程总结 1 ...

  7. Linux内核分析——期末总结

    Linux内核学习总结 首先非常感谢网易云课堂这个平台,让我能够在课下学习,课上加强,体会翻转课堂的乐趣.孟宁老师的课程循序渐进,虽然偶尔我学习地不是很透彻,但能够在后续的课程中进一步巩固学习,更加深 ...

  8. 期末总结:LINUX内核分析与设计期末总结

    朱国庆原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一,心得体会 关于网上听课这 ...

  9. 网易云课堂-----Linux内核分析-----期末主观题

    姚歌 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 下面是对8个课题的 ...

随机推荐

  1. apache配置CA证书通过https通信

    Apache Httpd 2.2 实现https加密通讯 实际生产中CA证书一般是向一些专业认证的国际机构来进行申请的.我们会模拟使用OpenSSL生成的证书,来实现Apache的安全加密通讯,这与实 ...

  2. trap命令的实战用法

    trap命令: trap命令是专用于捕捉信号的.比如像ctrl+c发送给终端的中断信号等等.在捕捉到信号之后,可以进行一系列的操作. 用法:trap  'COMMAND' INT COMMAND表示t ...

  3. Linux远程访问及控制(SSH)

    1.ssh协议:用于远程登录,端口号:22/tcp 配置文件: 1)服务器端口:/etc/ssh/sshd_config 2)客户端 :/etc/ssh/ssh_config 2.服务器监听选项: U ...

  4. 使用Gitkraken进行其他Git操作

    使用Gitkraken进行其他Git操作 查看某次 commit 的文件改动 使用 Gitkraken 能非常方便的看到任意一次的 commit 对项目文件的改动. 具体操作是:在树状分支图上单击某个 ...

  5. Python3编写网络爬虫09-数据存储方式二-JSON文件存储

    2.JSON文件存储 全称为JavaScript Object Notation 通过对象和数组的组合来表示数据,构造简洁且结构化程度非常高.是一种轻量级的数据交换格式 2.1 对象和数组 在Java ...

  6. MarkDown 排版测试

    大标题 小标题(正常) 小标题(多一杠) 一级标题 二级标题 三级标题 四级标题(未空格) 四级标题(正常) 个人编程,写一个命令行程序 注册Github账号,建立项目仓库 添加ReadMe.md并编 ...

  7. [ ArcGIS for Server 10.1 系列 ] - 重新创建Site

    一般当ArcGIS Server Site发生错误.ArcGIS Server无法启动或者ArcGIS Server某服务没有实例,就可能需要重新的创建Site.有时可以通过重新创建Site,就发现其 ...

  8. centos7下安装docker(8.3容器的常用操作)

    yu我们之前已经学习了如何运行容器docker run,也学习了如何进入容器docker attach和docker exec,下面我们来学习容器的其他操作: stop/start/restart 1 ...

  9. ucml设置列表分页类型

    aginationCtype 分页栏显示效果配置,取值为UCML.Pagination或UCML.PaginationMin,默认为UCML.PaginationMin,在视图显示前设置. 1.pag ...

  10. MySQL数据备份之mysqldump使用(转)

    文章转自 :https://www.cnblogs.com/jpfss/p/7867668.html mysqldump常用于MySQL数据库逻辑备份. 1.各种用法说明 A. 最简单的用法: mys ...