期中总结

于佳心  原创作品转载请注明出处  《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

计算机是如何工作的?

冯诺依曼体系结构:存储程序计算机,存储程序与程序控制

X86汇编基础:mov,push,pop,call,ret

汇编一个简单的C程序分析其汇编指令执行过程:汇编代码执行过程在堆栈中的变化

操作系统是如何工作的?

函数调用堆栈

三个法宝:

1.存储程序计算机工作模型
2.函数调用堆栈
3.中断

操作系统的两把剑:

1.中断上下文切换
2.进程上下文切换

建立框架:

pushl %ebp
movl %esp,%ebp

拆除框架:

movl %ebp,%esp
popl %ebp
ret

借助Linux内核部分源代码模拟存储程序计算机工作模型及时钟中断

CPU和内核代码共同实现了保存现场和恢复现场

在mykernel基础上构造一个简单的操作系统内核

C代码宏嵌入汇编代码的写法

asm(汇编语句模板;输出部分;输入部分;破坏描述部分);

构造一个简单的Linux系统MenuOS

idle是0号进程,关于0号进程和1号进程,所谓道生一(start_kernel....cpu_idle),一生二(kernel_init和kthreadd),二生三(即前面0、1和2三个进程),三生万物(1号进程是所有用户态进程的祖先,2号进程是所有内核线程的祖先)

扒开系统调用的三层皮(上)

用户态、内核态和中断处理

中断处理是从用户态进入内核态主要的方式

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

系统调用是特殊的中断

三层皮:

1.API
2.中断向量
3.中断服务程序

扒开系统调用的三层皮(下)

给MenuOS增加time和time-asm命令

在MenuOS中添加命令的过程分四步:

1.更新menu代码到最新版

2.在main函数中增加MenuConfig

3.增加对应函数

4.make rootfs

使用gdb跟踪系统调用内核函数sys_time

系统调用在内核代码中的工作机制和初始化

进程的描述和进程的创建

进程的描述

进程的三大功能

1.进程管理
2.文件管理
3.内核系统

进程的状态变化

进程的创建

在fork中,两个进程,fork系统调用在父子进程个返回一次

子进程 pid=0

父进程 pid=子进程的id

新进程是从ret_ from_ fork开始执行

可执行程序的装载

预处理、编译、链接和目标文件的格式

格式:

三种文件

1.可重定位文件
2.可执行文件
3.共享Object文件

两个链接器:链接编辑器,动态链接器

庄周(调用execve的可执行程序)入睡(调用execve陷入内核),醒来(系统调用execve返回用户态)发现自己是蝴蝶(被execve加载的可执行程序)

庄子和蝴蝶:你可以装载我,我可以装载你

进程的切换和系统的一般执行过程

进程的调度时机与进程的切换

不同类型的进程有不同的调度需求

第一种分类:

I/0-bound:频繁的进程I/0,通常会花费很多时间等待I/O操作的完成

CPU-bound:计算密集型,需要大量的CPU时间进行运算

第二种分类:批处理进程,实时进程,交互性进程(shell)

Linux系统的一般执行过程

最一般的情况:正在运行的用户态进程X切换到运行用户态进程Y的过程

  • 正在运行的用户态进程X

  • 发生中断——save cs:eip/esp/eflags(current) to kernel stack,then load cs:eip(entry of a specific ISR) and ss:esp(point to kernel stack).

  • SAVE_ALL //保存现场

  • 中断处理过程中或中断返回前调用了schedule(),其中的switch_to做了关键的进程上下文切换

  • 标号1之后开始运行用户态进程Y(这里Y曾经通过以上步骤被切换出去过因此可以从标号1继续执行)

  • restore_all //恢复现场
  • iret - pop cs:eip/ss:esp/eflags from kernel stack

  • 继续运行用户态进程Y

几种特殊情况

通过中断处理过程中的调度时机,用户态进程与内核线程之间互相切换和内核线程之间互相切换,与最一般的情况非常类似,只是内核线程运行过程中发生中断没有进程用户态和内核态的转换;

内核线程主动调用schedule(),只有进程上下文的切换,没有发生中断上下文的切换,与最一般的情况略简略;

创建子进程的系统调用在子进程中的执行起点及返回用户态,如fork;(next_ip=ret_from_fork)

加载一个新的可执行程序后返回到用户态的情况,如execve;

关于《Linux内核分析》

这是一本关于Linux内核的书:内核的目标,为达到目标所进行的设计以及设计的实现

从内核出发

内核有独一无二的特质,它实施自己的规则和奖罚措施,拥有整个系统的最高管理权

读书笔记链接:一二章

系统调用

描述了系统调用到底是什么,与库函数和API又怎样的关系

Linux程序如何实现系统调用,执行系统调用的连锁反应:陷入内核,传递系统调用号和参数,执行正确的系统调用函数,并把返回值带回用户空间

如何增加系统调用

读书笔记链接:第五章

调试

内核的调试:调试过程起始是一种寻求实现与目标偏差的行为

内核内置的调试架构,调试程序,记录日志,git二分法查找

读书笔记链接:第十八章

进程管理

操作系统中的核心概念:进程

进程的一般特性,进程与线程之间的关系,Linux如何存放和表示进程(task_struct,thread_info),如何创建进程(通过fork(),实际上最终是clone()),如何把新的执行映像装入到地址空间(exec()系统调用族),如何表示进程的层次关系,父进程如何收集后代的信息(wait()系统调用族),进程最终如何消亡(强制,或者调用exit())

读书笔记链接:第三章

链接

《深入理解计算机系统》中的内容

读书笔记链接:类似的第七章笔记

进程调度

进程调度程序是内核重要的组成部分

新CFS调度程序:适合众多可运行的进程,具有伸缩性,在调度周期和吞吐量之间求得平衡,满足各种负载的要求

进程调度所遵循的基本原则、具体实现、调度算法、牧犬Linux内核所使用的接口

读书笔记链接:第四章

学习心得:连续十周的学习之路充满坎坷,不过总算是坚持下来了,学得时候都自认为很明白,但是学完一周之后就会忘得差不多,看来及时复习还是必要的,所以又认真的总结了一遍,并辅以《Linux内核分析》教程,顿时感觉知识点捋顺了许多,为了不让辛苦学到的知识消失,还是需要定时复习一下

转载于:https://www.cnblogs.com/javablack/p/5427326.html

Linux内核分析 期中总结相关推荐

  1. Linux内核分析课程期中总结

    Linux内核分析课程期中总结 姓名:王朝宪 学号:20135114 注: 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com ...

  2. 《Linux内核分析》期中总结

    两个月Linux内核的学习,让我理解了Linux内核的基本工作原理,包括进程管理.内存管理.设备驱动.文件系统,从分析内核到了解整个系统是如何工作的.如何控制管理资源分配.进程切换并执行.各种策略和结 ...

  3. 期末总结20135320赵瀚青LINUX内核分析与设计期末总结

    赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 对LINUX内核分析与设计这 ...

  4. Linux内核分析——可执行程序的装载

    链接的过程 首先运行C预处理器cpp,将C的源程序(a.c)翻译成ASCII码的中间文件(a.i) 接着C编译器ccl,将a.i翻译成ASCII汇编语言文件a.s 接着运行汇编器as,将a.s翻译成可 ...

  5. LINUX内核分析第二周学习总结——操作系统是如何工作的

    LINUX内核分析第二周学习总结--操作系统是如何工作的 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/course ...

  6. 《Linux内核分析》实验一

    陈智威,<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 课堂学习笔记: 作业截图: 汇编代码堆栈分析: ...

  7. Linux 内核分析 之一:How Computer Works 实验

    说明 欧长坤 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 这学期学校恰好有操 ...

  8. linux内核分析 网络九,“Linux内核分析”实验报告(九)

    一 Linux内核分析博客简介及其索引 本次实验简单的分析了计算机如何进行工作,并通过简单的汇编实例进行解释分析 在本次实验中 通过听老师的视频分析,和自己的学习,初步了解了进程切换的原理.操作系统通 ...

  9. Linux内核分析作业第二周

    操作系统是如何工作的 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.函数调用堆栈 1.计算机工作三 ...

最新文章

  1. CODING 最佳实践:快课网研发效能提升之路
  2. nginx的配置和优化(隐藏版本号、gzip、expires、防盗链......等)
  3. 成功解决softmax_cross_entropy_with_logits (from tensorflow.python.ops.nn_ops) is deprecated and will be
  4. 网络编程--sockaddr 与 sockaddr_in
  5. JQuery对象与DOM对象的区别与转换
  6. WPF入门教程系列十三——依赖属性(三)
  7. 高科技护航“史上最严”高考
  8. php是阻塞模式吗,PHP非阻塞模式 - 黑白大熊猫的个人空间 - OSCHINA - 中文开源技术交流社区...
  9. 史上最大,人工智能算法模型 GPT-3 问世,这意味着什么?
  10. 比较nio大体上优于io的方面
  11. PIXI.JS兼容微信小游戏
  12. UVa 10082 WERTYU
  13. java微信web支付开发_java实现微信H5支付方法详解
  14. 2018java程序员面试题整理
  15. Windows消息钩子[键盘监控]
  16. 在aspx页面显示一张完整的RDL报表
  17. 你们要的《Java工程师成神之路》高清版思维导图,来了!
  18. 传奇服务器注册不了账号密码,登录器显示服务器状态良好,但不能注册帐号?...
  19. Pure DNS 可能是迄今最不稳定的DNS
  20. LR 杂记--数据分析Analysis

热门文章

  1. Redis集群系列一 —— AKF拆分原则
  2. R语言使用caret包的confusionMatrix函数计算混淆矩阵、基于混淆矩阵的信息手动编写函数计算accuray、准确率指标
  3. Ar详细制作发布流程
  4. Linux proxy 设置
  5. QT状态栏(statusbar)用法
  6. 苹果消息推送服务教程:第一二部分(共2部分)
  7. arduino学习:本人编写的单个传感器控制电机运转的代码
  8. 企业微信客户端开启开发者模式
  9. 郭敬明唯美悲伤的短句分享
  10. C语言-函数(自定义函数)