20135320赵瀚青LINUX第七周学习笔记】的更多相关文章

赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 本周学习的内容主要是讨论可执行文件,最开始讲解了可执行文件是怎么得来的,也就是上个学期娄老师教我们的四步,预处理,编译成汇编指令,变成二进制代码,最后执行可执行文件.然后讲解了可执行文件的演变,从最开始的a.out文件,演变成ELF文件,然后讲解了如何装载可执行文件.也就是这周的实验内容,先用test_execv.c覆盖tect.…
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 按照刘老师的周从三个角度讲述这个星期的学习内容.第一个角度知道自己在干什么,这周主要内容就是在menu菜单中添加两个自己的功能,也就是上周我们编辑的两个函数,如何实现就是在test.c也就是make中编译的文件中添加两个函数,然后就进行编译,实现了功能,然后进行gdb调试,可以看出这个代码的变化情况.第二个角度,为什么做这个,知道…
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 这周主要讲解的是进程.首先老师就讲解了PCB进程结构块的数据结构,PCB进程控制块的代码包含了很多信息,最开始就是进程的状态信息 ,然后是进程状态符,进程调度相关信息等等很多部分.然后老师讲解了用fork()创建进程的过程,然后用gdb调试,跟踪创建进程的过程. 本周学习的内容在上个学期娄老师的课程中有涉及,所以难度不是非常大,但…
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 本周学习的是linux内核中的进程调度,之前我们在操作系统中有讲解进程调度的分类,以及一些调度算法.而linux中的进程调度有所不同,首先老师讲解了进程调度和进程调度的时机,所有的用户态进程都只能被调度,而内核线程可以主动调度,而进程调度的实现都是通过schedule函数,然后讲解了进程上下文所包含的信息,然后讲解了切换寄存器状态…
概述 什么是进程调度 进程调度:在可运行态进程之间分配有限处理器时间资源的内核子系统. 一.调度策略 4.1进程类型 I/O消耗型进程:大部分时间用来提交I/O请求或是等待I/O请求,经常处于可运行状态,但运行时间短,等待请求过程时处于阻塞状态.如交互式程序. 处理器消耗型进程:时间大都用在执行代码上,除非被抢占否则一直不停的运行. 综合型:既是I/O消耗型又是处理器消耗型. 调度策略要在:进程响应迅速(响应时间短)和最大系统利用率(高吞吐量)之间寻找平衡. 4.2 调度概念 优先级:基于进程价…
第三章 进程管理 3.1 进程 进程的定义: 是处于执行期的程序以及它所包含的资源的总称. 线程的定义: 是在进程中活动的对象. 每个线程都拥有一个独立的程序计数器.进程栈和一组进程寄存器. 内核调度的对象是线程,而不是进程. 3.2 进程描述符及任务结构 进程描述符的结构:task_struct,定义在<linux/sched.h>中,包含一个具体进程的所有信息. task_struct 就是指 PCB (进程控制块). 3.2.1 分配进程描述符 thread_info结构在文件<a…
概述:调试工作艰难是内核级开发区别于用户级开发的一个显著特点 18.1准备开始 内核调试往往是一个令人挠头不已的漫长过程.幸运的是,在这些费劲的问题中也有不少比较简单而且容易消灭的小bug,运气好你可能面对的是些简单的小bug. 开始做―些调查之前,不会清楚到底面对的是什么现在,需要的只是: 一个bug.听起来很可笑,但确实需要一个确定的bug.如果错误总是能够重现的话,那对我们会有很大的帮助(有一部分错误确实如此).然而不幸的是,大部分bug通常都不是行为可靠而且定义明确的. 一个藏匿bug的…
第五章--系统调用 5.1 与内核通信 作用 1.为用户空间提供一种硬件的抽象接口 2.保证系统稳定和安全 3.除异常和陷入,是内核唯一的合法入口. API.POSIX和C库 关于Unix接口设计:提供机制而不是策略 5.3 系统调用 5.3.1系统调用号 当用户空间的进程执行一个系统调用,就用系统调用号指明到底执行哪个系统调用. sys_ni_syscall():错误号,负责"填补空缺",返回-ENOSYS,专门针对无效的系统调用. 存在sys_call_table. 5.3.2系统…
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 对LINUX内核分析与设计这门课程的理解 LINUX内核在我看来就是操作系统和深入理解计算机系统的结合.Linux是一种开源电脑操作系统内核.它是一个用C语言写成,符合POSIX标准的类Unix操作系统.我觉得LINUX操作系统和WINDOWS操作系统最大的不同就是,WINDOWS操作系统的内核源代码是不公开的,也不共享,这样一些编程的…
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.概述 第一周的学习内容主要是基础的计算机工作的相应知识,主要学习了三个知识点 存储程序计算机工作模型 X86汇编基础 汇编一个简单的c程序并分析汇编指令执行过程 二.存储程序计算机的工作模型 最基础的就是冯诺依曼体系结构 冯·诺依曼体系结构冯·诺依曼理论的要点是:数字计算机的数制采用二进制:计算机应该按照程序顺序执行. 三.X86汇…
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 本周是学习的主要是构造简单的LINUX系统,因为涉及到的是LINUX内核相关的知识,所以在理解上有一点困难,视频看了几遍加上老师的讲解,才艰难的弄懂了大概,相信以后几周的学习肯定更加艰难,但是不能因为困难就放弃,要更加努力地完成任务. 一.实验概述 本周实验大致做的事情就是,启动qemu然后启动kernel内核,然后再运行init…
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.计算机的三个法宝 存储程序计算机 函数调用堆栈 中断机制 二.堆栈 1.堆栈的空间分配 栈:由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈. 堆: 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表. 2.堆栈缓存方式 栈使用的是一级缓存, 他们通常都…
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 本周的内容主要是讲解系统调用中的一些步骤,主要有三步,而主要是采用中断机制,也是老师讲解的重点,而实验的内容则是用汇编代码代替一下系统调用的C代码,看能不能产生相同的结果,总体来说本周学习难度不大,但是通过看视频,看书,做实验,感觉学到了很多东西. 课本内容 一.用户态.内核态和中断处理过程 用户态和内核态 CPU指令执行级别 内…
期中总结 心得与体会 本学期的LINUX内核这门课程已经进行了一半,这门课的学习方法和上个学期深入理解计算机系统的方式差不多,所以也没有特别多不适应,LINUX内核在我看来,就是理解一个操作系统是如何实现各个功能的,先从宏观上让我们理解一下,LINUX操作系统,然后再让我们看看各个功能实现的代码和过程,包括进程的创建,进程的中断,进程的调度等等,每一节的实验,基本都是让我们跟踪一个进程的实现过程.网课基本上已经结束了,以后的日子,老师会布置新的任务,希望在日后的学习中,能够学习到更加有用的知识,…
第二章-从内核出发 获取内核代码 使用git 获取最新提交到版本树的一个副本 $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git 安装内核源代码 压缩形式为bzip2运行:$ tar xvjf linux-x.y.z.tar.bz2压缩形式为zip运行:$ tar xvzf linux-x.y.z.tar.gz 使用补丁 从内部源码树开始运行$ patch -p1 < ../patch-…
第一章-Linux内核简介 Unix的历史 依旧被认为是最强大和最优秀的系统 由一个失败的操作系统Multics中产生 被移植到PDP-11型机中 由其他组织进一步开发 重写了虚拟内存系统,最终官方版本诞生 Linux简介 是一个非商业化产品 LINUS是LINUX之父 LINUX内核也是公开软件 操作系统和内核简介 用户界面是操作系统的外在表象,内核才是操作系统的内在核心. 系统其他部分必须依靠内核这部分软件提供的服务,像管理硬件设备.分配系统资源等. 当内核运行的时候,系统以内核态进入内核空…
<Linux内核分析>第七周学习笔记 可执行程序的装载 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 [学习视频时间:1小时35分钟 实验时间:1小时 撰写博客时间:2小时40分钟] [学习内容:共享库和动态链接.exec系统调用的执行过程.可执行程序的装载] 一.预处理.编译.链接和目标文件的格式 1.1 可执行程序如何得来? 过程: C源代码(.c)经过编译器预处…
Linux第七周学习总结--可执行程序的装载 作者:刘浩晨 [原创作品转载请注明出处] <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.预处理.编译.链接和目标文件的格式 1.可执行程序怎么来的 过程:先预处理.cpp,在编译成汇编代码.s到目标代码.o,再链接成可执行文件,加载到内存中执行. 预处理.c文件,预处理负责把include的文件包含进来及宏替换等工作:gcc -E -o hello.cpp h…
Linux内核分析第七周学习笔记--Linux内核如何装载和启动一个可执行程序 zl + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 由源代码生成可执行文件 预处理 => 编译 => 汇编 => 链接 gcc -E hello.c -o hello.i gcc –S hello.i –o hello.s gcc –c hello.s –o hello.o gcc…
第七周学习笔记 MySQL(数据管理系统)学习 知识点总结: 不能通过关闭MySQL数据库服务器所占用的命令行窗口来关闭MySQL数据库. 如果MySQL服务器和MySQL管理工具驻留在同一台计算机上,主机名可以是localhost或127.0.0.1. JDBC是允许用户在不同数据库之间做选择的一个抽象层.JDBC允许开发者用JAVA写数据库应用程序,而不需要关心底层特定数据库的细节. 查询操作: 向数据库发送SQL查询语句,先用statement声明对象,已创建的连接对象调用creatSta…
第七周 可执行程序的装载 一.预处理.编译.链接和目标文件的格式 1.可执行程序是怎么来的 C代码—>预处理—>汇编代码—>目标代码—>可执行文件 .asm汇编代码 .o目标码 a.out可执行文件 (1)预处理:负责把include的文件包含进来及宏替换工作,即文字替换,.c变成.i gcc -E -o main.i main.c (2)编译:.i变成.asm,是ASCⅡ gcc -S -o main.asm main.i (3)汇编: gcc -c -o main.o main…
朱荟潼 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 第七周 Linux内核如何装载和启动一个可执行程序 1. 理解编译链接的过程和ELF可执行文件格式,详细内容参考本周第一节: (1) 可执行程序怎么来的? linux系统中,可执行程序一般要经过预处理.编译.汇编.链接.执行等步骤. (2) 目标文件的格式ELF (3) 静态链接的ELF可执行文件与进程的地址空间 一般静态链…
视频知识学习 1.fork()函数被调用一次,但返回两次: 2.Linux通过复制父进程来创建一个子进程,通过调用fork来实现: 3.Linux会为每个子进程动态的分配一个task_struct结构. 创建一个新进程在内核中的执行过程 fork.vfork和clone三个系统调用都可以创建一个新进程,而且都是通过调用do_fork来实现进程的创建: Linux 通过复制父进程来创建一个新的进程,那么这就给我们理解这一个过程提供一个想象的框架: 复制一个PCB--task_struct 1. e…
虚拟存储器 虚拟存储器是硬件异常.硬件地址翻译.主存.磁盘文件和内核软件的完美交互. 虚拟存储器的特点: 中心的 强大的 危险的 物理和虚拟寻址 计算机系统的主存被组织成一个由M个连续的字节大小的单元组成的数据 每个字节都有一个唯一的物理地址 第一个字节的地址为0,接下来的抵制依次+1 这种方式称为物理寻址 虚拟寻址时,CPU通过生成一个虚拟地址来访问主存,该地址被送到存储器之前先转换成适当的物理地址.该任务叫做地址翻译. 地址需要CPU硬件和操作系统之间紧密合作 存储器管理单元(在CPU上)利…
网络编程 客户端-服务器编程模型 每个网络应用都是基于客户端-服务器模型. 一个应用是由一个服务器进程和一个或者多个客户端进程组成. 服务器管理某种资源,并通过操作资源来为客户端提供某种服务. 基本操作是事务. 四个步骤: 当客户端需要服务时,向服务器发送请求,发起一个事务. 服务器收到请求后,解释它,并以适当的方式操作它的资源. 服务器给客户端发送一个响应,并等待下一个请求. 客户端收到响应并处理它. 网络 客户端和服务器通常运行在不同的话主机上,并且通过计算机网络的硬件和软件资源来通信. 网…
1:链接概述 链接(linking)是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载(或被拷贝)到存储并执行. 编译系统提供的调用预处理器.编译器.汇编器和链接器来构造目标文件的. 2. 静态链接 为了构造可执行文件,链接器的两个主要任务 符号解析:目标文件定义和引用符号.符号解析的目的是将每个符号引用刚好和一个符号定义联系起来. 重定位:编译器和汇编器生成从地址0开始的代码和数据节.链接器通过把每个符号定义与一个存储器位置联系起来,然后修改所有对这些符号的引用,使得…
姬梦馨 原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 常用调试参数 r(run) 开始运行程序 c(continue) 继续运行一直到断点停止 b(break) 设置程序断点 l(list) 显示当前行后面的源程序 bt (backtrace) 查看堆栈信息 info 查看各类gdb信息以及环境信息,比如:info break可以查看断点信息 p(print) 打印出变量值;如 p var,会把va…
LINUX内核分析第七周学习总结:可执行程序的装载 韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 内容提要 一.得到一个可执行程序 1. 预处理.编译.链接 gcc hello.c -o hello.exe gcc编译源代码生成最终可执行的二进制程序,GCC后台隐含执行了四个阶段步骤. 预处理 => 编译 => 汇编 => 链接 预处理:编译器将C源代…
<Linux内核分析>第七周学习总结                         ——可执行程序的装载 姓名:王玮怡  学号:20135116 一.理论部分总结 (一)可执行程序的装载 1.预处理.编译.链接和目标文件的格式 C代码经过编译器的预处理(.cpp),然后编译成汇编代码(.asm/.s),由汇编器成目标代码(.o,二进制文件),再链接成可执行文件,最后由操作系统加载到内存中执行. 预处理:编译器将C源代码中包含的头文件编译进来和执行宏替换等工作 gcc -E hello.c -…
LINUX内核分析第七周学习总结 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 可执行程序的装载 1.可执行程序时如何产生的 编译器预处理 gcc -E -o XX.cpp XX.c (-m32)//.cpp是预处理文件 汇编器编译成汇编代码 gcc -x cpp-output -S -o hello.s hello.cpp (-m32…