韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.函数调用堆栈 1. 小结:计算机是怎样工作的 三个法宝:存储程序计算机.函数调用堆栈.中断机制. 存储程序计算机工作模型,计算机系统最最基础性的逻辑结构. 函数调用堆栈,高级语言得以运行的基础,只有机器语言和汇编语言的时候堆栈机制对于计算机来说并不那么重要,但有了高级语言及函数,堆栈成为了计算机的基础功能.(函数参数传递…
郝智宇   无转载   <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.函数调用堆栈: 1.计算机是如何工作的: 三个法宝:存储程序计算机.函数调用堆栈(堆栈机制是高级语言的起点).中断机制. 2.堆栈作用: 函数调用框架.传递参数.保存返回地址.提供局部变量空间... 3.堆栈寄存器(esp,ebp)和堆栈操作(push,pop) 其他关键寄存器:cs:eip(call,ret) 4.中断机制是如何工作的…
原文:Linux内核分析(二)----内核模块简介|简单内核模块实现 Linux内核分析(二) 昨天我们开始了内核的分析,网上有很多人是用用源码直接分析,这样造成的问题是,大家觉得很枯燥很难理解,从某种意义上来说linux系统本身就是由一个个模块构成的,所以我会结合内核模块的设计,去分析内核,从而达到对linux内核的理解. 今天我们会分析到以下内容: 1.      Linux内核模块简介 2.      简单内核模块实现 l  Linux内核模块简介 1.       何为内核模块 在上一篇…
张文俊 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 1.进程的描述 进程控制块PCB——task_struct 为了管理进程,内核必须对每个进程进行清晰的描述,进程描述符(即task_struct)提供了内核所需了解的进程信息. struct task_struct数据结构很庞大 Linux进程的状态与操作系统原理中的描述的进程状态似乎有所不同,比如就绪状态和运行状态都是TA…
一.知识要点 1.计算机是如何工作的?(总结)——三个法宝 存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: 函数调用堆栈,高级语言得以运行的基础,只有机器语言和汇编语言的时候堆栈机制对于计算机来说并不那么重要,但有了高级语言及函数,堆栈成为了计算机的基础功能: enter pushl %ebp movl %esp,%ebp leave movl %ebp,%esp popl %ebp 函数参数传递机制和局部变量存储 了解堆栈存在的目的和编译器对堆栈使用的规则是理解操作系统一些关键性代码…
贾瑗 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000  一.操作系统是如何工作的 进程:是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.进程需要执行的时候操作系统对他分配相应的资源的.这里的资源指的就是计算机的硬件和系统资源. CPU只有一个但计算机会有很多进程,所以系统需要轮流给进程分配CPU这个硬件资源,这就是的时间片…
韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.冯诺依曼体系结构:存储程序计算机 1. 从硬件角度 总线 CPU ============ 内存 - CPU上的IP总指向内存的某一块区域,CPU执行其所指向的指令. 2. 从程序员角度(软件) 内存保存指令和数据,CPU解释执行 接口 API:应用程序编程接口,程序员<->计算机 ABI:应用程序二进制接口…
<Linux内核分析>第一周.计算机是如何工作的? 20135204 郝智宇  一.存储程序计算机工作模型 1.      冯诺依曼体系结构: 数字计算机的数制采用二进制:计算机应该按照程序顺序执行. 内存保存指令和数据,CPU负责解释和执行这些指令. 2.    API: 程序员与计算机的接口界面. 3.    EIP: CALL  RET  IMP   二.X86汇编基础 1.      X86CPU的寄存器 E开头32位,R开头64位.   堆栈是计算机中非常基础性的东西. 2.    …
20135118 罗鹏越 本周学习的是linux内核中的进程调度,之前我们在操作系统中有讲解进程调度的分类,以及一些调度算法.而linux中的进程调度有所不同,首先老师讲解了进程调度和进程调度的时机,所有的用户态进程都只能被调度,而内核线程可以主动调度,而进程调度的实现都是通过schedule函数,然后讲解了进程上下文所包含的信息,然后讲解了切换寄存器状态所使用的switch to函数,每一个部分都单独分析了.然后讲解了LINUX架构和执行过程.虽然在操作系统中讲解过了进程调度,但是这个讲解得更…
实验步骤: 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用.本次实验中我使用第20号系统调用getpid()函数,用于取得进程识别码. C代码(getpid.c): #include <unistd.h> #include <stdio.h> int main() { pid_t pid; pid = getpid(); printf("pid = %d \n",pid); return 0; } 编译及运行结果见下图: 嵌入汇编代码getpi…
一.实验:简单的时间片轮转多道程序内核代码运行与分析 my_start_kernel之前都是硬件初始化,它是操作系统的执行入口,每循环100000次就进行一次打印. 执行更加简单,每次时钟中断时都会调用函数输出my_time_handler.其中怎样获取时钟中断和时钟中断处理入口由Linux内核代码处理好了. 二.操作系统是如何工作的 1.中断机制(由CPU和内共同实现了保留和恢复现场) 2.进程上下文的切换:a.还从未执行过的进程 b.正在执行的进程 三.进程的启动和切换机制 在interru…
Linux实践二--内核模块的编译 标签(空格分隔): 20135328陈都 理解内核的作用 Linux内核[kernel]是整个操作系统的最底层,它负责整个硬件的驱动,以及提供各种系统所需的核心功能,包括防火墙机制.是否支持LVM或Quota等文件系统等等,如果内核不认识某个最新的硬件,那么硬件也就无法被驱动,你也就无法使用该硬件. 计算机真正工作的东西其实是硬件,例如数值运算要使用到CPU.数据储存要使用到硬盘.图形显示会用到显示适配器.音乐发声要有音效芯片.连接Internet 可能需要网…
linux读书笔记(1,2章) 标签(空格分隔): 20135328陈都 第一章 Linux内核简介 Unix的历史 Unix 虽然已经使用了40年,但计算机科学家仍然认为它是现存操作系统中最强大和最优秀的系统.从1969 年诞生以来,由Dennis Ritchie 和Ken Thompson 的灵感火花点亮的这个Unix产物已经成为一种传奇,它历经了时间的考验依然声名不坠. Multics 项目被终止后,贝尔实验室计算科学研究中心的人们发现自己处于一个没有交互式操作系统可用的境地.在这种情况下…
给MenuOS增加time和time-asm命令 上周是从用户态的观点来理解系统调用,这周从内核态出发研究系统调用,通过跟踪调试,首先把上周的两个命令加到MenuOS中: rm menu -rf 强制删除原menu文件 git clone http://github.com/mengning/menu.git 从github中克隆 cd menu make rootfs 运行自动编译脚本,生成根文件系统,启动MenuOS 更新menu代码到最新版 在main函数中增加MenuConfig(一个命…
实验: rm menu -rf git clone https://github.com/megnning/menu.git cd menu ls mv test_exec.c test.c vi test.c // 可以看到增加了一个exec的程序,只比fork程序多了一个execlp vi Makefile // 查看Makefile的更改,加入了hello make rootfs 先设置sys_execve后,在menuOS里执行系统调用exec,会停在如图所示代码,找到第一个断点 sys…
使用gdb跟踪创建新进程的过程 rm menu -rf git clone https://github.com/mengning/menu.git  mv test_fork.c test.c  执行fork,可以看到父进程子进程都输出了信息. 使用gdb进行调试 qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S gdbfile linux-3.18.6/vmlinuxtarget remote:1…
http://blog.sina.com.cn/s/blog_78e559950102wo67.html…
<Linux内核分析>第二周学习报告 ——操作系统是如何工作的 姓名:王玮怡  学号:20135116 第一节 函数调用堆栈 一.三个法宝 二.深入理解函数调用堆栈 三.参数传递与局部变量 1.根据C代码获得反汇编代码 先通过gcc -g生成test.c的可执行文件test,然后使用objdump -S获得test的反汇编文件. 2.函数参数的存储和调用传递方式 (1)参数存储 x+y: move 0xc(%ebp),%eax add 0x8(%ebp),%eax %eax用于函数返回 (2)…
韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.课程总结 1. 课程学习概述 计算机的工作方式:理解Linux的切入点. Linux的整体理解:操作系统的启动.系统功能调用.堆栈变化.进程的创建.可执行程序加载和切换. 调试分析:通过gdb调试内核和分析这些内核代码的基本方法. 2. 学习博客汇总 (1)LINUX内核分析第一周学习总结:计算机是如何工作的? 关于课程…
<Linux内核分析>第二周学习笔记 操作系统是如何工作的 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 1. 前言 计算机是如何工作的? 三个法宝: 存储程序计算机:所有计算机基础性的逻辑框架. 堆栈:高级语言的起点,函数调用需要堆栈机制. 中断机制:多道系统的基础,是计算机效率提升的关键. 2. 函数调用堆栈 2.1 堆栈 堆栈是C语言程序运行时必须的一个记录调用…
张文俊 + 原创作品转载请注明出处 + <Linux 内核分析> MOOC 课程 实验要求: 1.总结部分要求阐明自己对“计算机是如何工作的”理解: 2.博客中需要使用实验截图: 实验内容: 1.阐述计算机是如何工作的: 2.分析汇编代码的工作过程中堆栈的变化: 一.冯诺依曼体系结构 冯诺依曼体系结构是现代计算机的基础,现在大多计算机仍是冯诺依曼计算机的组织结构,只是作了一些改进而已,并没有从根本上突破冯体系结构的束缚. 根据冯·诺依曼体系结构构成的计算机,必须具有如下功能: 把需要的程序和数…
目录: “Linux内核分析”实验一报告 “Linux内核分析”实验二报告 “Linux内核分析”实验三报告 Linux实验四报告 “Linux内核分析”第五周报告 "Linux内核分析"第六周实验报告 "Linux内核分析"第七周 <Linux内核分析>第八周 进程的切换和系统的一般执行过程 一.计算机是如何工作的 存储程序计算机工作模型:冯诺依曼体系结构 X86汇编基础:CPU的寄存器(通用寄存器.段寄存器.标志寄存器).常见汇编指令.堆栈 汇编一个…
万子惠 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程 实验部分 menu程序: cd LinuxKernel/ qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img 其中: 1.qemu 是一个快速的动态译指的虚拟机 2.-kernel bzImage: 内核镜像 3.-initrd file使用file作为初始的ram磁盘. gdb (gdb)file linux-3.18.6/vmlinu…
<Linux内核分析>第一周学习笔记 计算机是如何工作的 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 1. 存储程序计算机工作模型 1.1 冯诺依曼体系结构 冯诺依曼体系结构,即具有存储程序的计算机的体系结构.超级计算机都可以用这种体系描述. 1.2 存储程序计算机工作模型 从硬件上看:CPU与内存之间由总线连接,CPU中一个关键寄存器IP(在16位CPU中叫IP,…
张文俊 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.第二周学习内容总结 1.计算机工作“三大法宝” 首先,计算机工作原理最重要的三个内容就是:存储程序计算机工作模型.中断机制和函数调用堆栈. 存储程序计算机工作模型是计算机系统最最基础性的逻辑结构: 中断机制是多道程序操作系统的基点,没有中断机制程序只能从头一直运行结束才有可能开始运行其他程序: 函数调用堆栈是高级语言得以…
程涵  原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000  [操作系统是如何工作的]   教学内容重要部分整理总结 1.三个法宝:存储程序计算机.函数调用堆栈.中断机制. 存储程序计算机工作模型,计算机系统最最基础性的逻辑结构. 函数调用堆栈,高级语言得以运行的基础,只有机器语言和汇编语言的时候堆栈机制对于计算机来说并不那么重要,但有了高级语言及函数,堆栈成为了计算机的基础功能.(函数参数传递机制和局部…
程涵  原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 进程的切换和系统的一般执行过程 知识点梳理 一.进程切换的关键代码分析 1.1 进程调度与进程调度的时机分析 操作系统原理中介绍了大量进程调度算法,这些算法从实现的角度看仅仅是从运行队列中选择一个新进程,选择的过程中运用了不同的策略而已. 对于理解操作系统的工作机制,反而是进程的调度时机与进程的切换机制更为关键. 不同类型的进程有不同的调度需求…
程涵  原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 可执行程序的装载 知识点梳理 一.预处理.编译.链接和目标文件的格式 可执行程序是如何得来的 C源代码(.c)经过编译器预处理被编译成汇编代码(.asm) 汇编代码由汇编器被编译成目标代码(.o) 将目标代码链接成可执行文件(a.out) 可执行文件由操作系统加载到内存中执行 vi hello.c gcc -E -o hello.cpp hell…
程涵  原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 进程的描述和进程的创建 知识点梳理: 一. 进程的描述 (1)操作系统的三大管理功能包括 进程管理 内存管理 文件系统 (2)PCB task_struct中包含 进程状态 进程打开的文件 进程优先级信息 (3)通过唯一的进程标识PID来区别每个进程. (4)进程状态(代码分析) http://codelab.shiyanlou.com/xref…
构造一个简单的Linux系统 张文俊+原创作品转载请注明出处+<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验内容: 一.gdb跟踪调试内核从start_kernel到init进程启动 1.qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S # 关于-s和-S选项的说明: // -S freeze CPU at s…