如果某种应用并不需要在多个CPU上并行执行,那么软中断其实是没有必要的.因此诞生了弥补以上两个要求的tasklet.它具有以下特性: a)一种特定类型的tasklet只能运行在一个CPU上,不能并行,只能串行执行. b)多个不同类型的tasklet可以并行在多个CPU上. c)软中断是静态分配的,在内核编译好之后,就不能改变.但tasklet就灵活许多,可以在运行时改变(比如添加模块时). tasklet是在两种软中断类型的基础上实现的,因此如果不需要软中断的并行特性,tasklet就是最好的选…
软中断.tasklet和工作队列并不是Linux内核中一直存在的机制,而是由更早版本的内核中的“下半部”(bottom half)演变而来.下半部的机制实际上包括五种,但2.6版本的内核中,下半部和任务队列的函数都消失了,只剩下了前三者.本文重点在于介绍这三者之间的关系.(函数细节将不会在本文中出现,可以参考文献,点这里) (1)上半部和下半部的区别上半部指的是中断处理程序,下半部则指的是一些虽然与中断有相关性但是可以延后执行的任务.举个例子:在网络传输中,网卡接收到数据包这个事件不一定需要马上…
中断分为同步中断和异步中断. 同步中断是由CPU控制单元产生的,"同步"是指只有在一条指令执行完毕后,CPU才会发出中断,比如系统调用 异步中断是由其他硬件设备依照CPU时钟信号产生的,即意味着中断能够在指令之间发生,例如键盘中断 按照Intel的微处理器手册,同步中断和异步中断也分别称为异常(或者软件中断)和中断, 中断为设备硬件产生的,异常的产生源有两种, 一种是程序错误,内核发送一个信号 另一种内核发生缺页,或对内核服务的一个请求(系统调用,通过一条int指令 .sysenter…
接博文<Linux内核驱动开发之KGDB单步调试内核(kgdboc方式)>.上篇博文中,仅简单介绍使用串口的Kgbd的流程(kgdboc方式),本文将重点介绍KGDB调试Linux内核的原理.内核版本在2.6.26以前的Linux,kgdb是通过补丁安装的,过程非常复杂,而且问题比较多.Linux内核从 2.6.26开始已经在内部集成kgdb,只需要配置kgdb并重新编译2.6.26(或更高)内核即可.使用kgdb调试需要两台机器,即主机和目标机(一般为开发板),两者通过串口线相连.要调试的内…
两个月Linux内核的学习,让我理解了Linux内核的基本工作原理,包括进程管理.内存管理.设备驱动.文件系统,从分析内核到了解整个系统是如何工作的.如何控制管理资源分配.进程切换并执行.各种策略和结构让系统运行时更有效率等.每周都要看视频.做实验.写博客,在一点一滴的积累中,我逐渐弄清楚Linux内核的脉络,更令我感到欣喜的是本来略感散乱的知识点也在最后一节课的总览里看到了其内在联系.苟有恒,学好Linux不是梦! 一.博客目录 第一周<计算机是如何工作的?> http://www.cnbl…
Linux内核从原理到代码详解 培训视频 Linux内核源码研读与实战演练 [7.10][美河资料发布小组@aipepsi][linux内核分析视频教程] 炼数成金Linux内核探秘 [11.23][美河资料发布小组@勿望我][尚德][linux内核编程入门(12.4更新)] [05.11]][美河资料发布小组@aipepsi]linux内核编程(进阶篇) linux内核编程入门 海量视频 [09.07][美河资料发布小组@lqh101517][山东德州思蓝][linux内核分析视频] [8.2…
结合中断上下文切换和进程上下文切换分析Linux内核的一般执行过程 目录 结合中断上下文切换和进程上下文切换分析Linux内核的一般执行过程 一. 实验准备 二. 实验过程 I 分析中断上下文的切换 II 分析fork子进程启动执行时进程上下文及其特殊之处 III 分析execve系统调用中断上下文及其特殊之处 IV 以系统调用作为特殊的中断,结合中断上下文切换和进程上下文切换分析Linux系统的一般执行过程 三. 总结 一. 实验准备 详细要求 结合中断上下文切换和进程上下文切换分析Linux…
[TOC] 本文基于Linux2.6.32内核版本号. 引言 软中断.tasklet和工作队列并非Linux内核中一直存在的机制,而是由更早版本号的内核中的"下半部"(bottom half)演变而来. 下半部的机制实际上包含五种,但2.6版本号的内核中.下半部和任务队列的函数都消失了,仅仅剩下了前三者. 介绍这三种下半部实现之前.有必要说一下上半部与下半部的差别. 上半部指的是中断处理程序,下半部则指的是一些尽管与中断有相关性可是能够延后运行的任务. 举个样例:在网络传输中.网卡接收…
<Linux内核原理与设计>第五周作业 视频学习及操作分析 一.用户态.内核态和中断 内核态在CPU执行中对应高执行级别,执行级别为0级,具有特权指令,可以访问任意物理地址:用户态执行级别为3级,在低级别执行状态下,代码掌控范围会受到限制. 内核态和用户态的区分:两者有一显著的区分方法,就是cs:eip寄存器.内核态时,cs:eip可以是任意地址,在32位X86机器上具有4G进程地址空间,因此既可以访问0X00000000-0Xbfffffff的地址空间,也可以访问0Xc0000000以上的地…
20169212<Linux内核原理与分析>课程总结 每周作业链接汇总 第一周作业:完成linux基础入门实验,了解一些基础的命令操作. 第二周作业:学习MOOC课程--计算机是如何工作的:完成实验楼上配套实验一,反汇编一个简单的C程序,分析堆栈变化情况:阅读学习教材<Linux内核设计与实现>第1,2,18章内容. 第三周作业:使用自己的ubuntu按照书进行基本实验,遇到的一些问题及解决. 第四周作业:学习MOOC课程--操作系统是如何工作的:完成实验楼上配套实验二,使用自己的…
视频学习 一.用户态.内核态和中断 内核态:处于高的执行级别下,代码可以执行特权指令,访问任意的物理地址,这时的CPU就对应内核态 用户态:处于低的执行级别下,代码只能在级别允许的特定范围内活动.在日常操作下,执行系统调用的方式是通过库函数,库函数封装系统调用,为用户提供接口以便直接使用. Intel x86 CPU有四种不同的执行级别0-3,Linux只使用了其中的0 3级分别表示内核态和用户态.cs寄存器的最低两位表明了当前代码的特权级,00或者11. 内核态cs:eip的值是任意的,即可以…
Linux内核设计第一周 ——从汇编语言出发理解计算机工作原理 作者:宋宸宁(20135315) 一.实验过程 图1 编写songchenning5315.c文件 图2 将c文件汇编成32位机器语言 图3 将.s文件中的链接语句删除,获得最后的汇编代码 二.分析堆栈变化情况 三.总结 阐明对“计算机是如何工作的”的理解. ①计算机是依据冯诺依曼体存储结构,依据其核心思想——存储程序计算机工作模型,按程序编排的顺序,一步一步地取出指令,自动地完成指令规定的操作. ②从硬件的角度看,是通过总线连接C…
Linux内核设计第二周 ——操作系统工作原理 作者:宋宸宁(20135315) 一.实验过程 图1 执行效果 从图中可以看出,每执行my_ start_ kernel函数两次或一次,my_ time_ hander函数执行一次. 图2 mymain.c文件关键代码部分 图3 myinterrupt.c文件关键代码部分 二.分析分析进程的启动和进程的切换机制(分析见注释) 1.myinterrupt.c /* * linux/mykernel/myinterrupt.c * * Kernel i…
<Linux内核原理与分析>第二周作业 这一周学习了MOOCLinux内核分析的第一讲,计算机是如何工作的?由于本科对相关知识的不熟悉,所以感觉有的知识理解起来了有一定的难度,不过多查查资料,看看别人的解答,慢慢的也就理解了,最终形成自己的知识脉络. 实验分析 先创建文件,通过vim将C代码写到文件中去,如图. 再编译成可执行程序和反编译成汇编代码.为什么反编译是这个代码呢? gcc -S -o main.s main.c 原来gcc命令中 -S 参数表示仅仅汇编而不进行编译及链接,也就是将源…
<Linux内核原理与分析>第二周作业 本周作业分为两部分:第一部分为观看学习视频并完成实验楼实验一:第二部分为看<Linux内核设计与实现>1.2.18章并安装配置内核. 第一部分 本部分主要是观看孟老师的学习视频,学习计算机是如何工作的,并根据提示完成实验. 寄存器 通用寄存器: AX:累加器 BX:基地址寄存器 CX:计数寄存器 DX:数据寄存器 BP:堆栈基址针 SI.DI:变址寄存器 SP:堆栈顶指针 段寄存器: CS:代码段寄存器,指向包含程序指令的段. SS:栈段寄存…
实验一 Linux系统简介 这一节主要学习了Linux的历史,Linux有关的重要人物以及学习Linux的方法,Linux和Windows的区别.其中学到了LInux中的应用程序大都为开源自由的软件,用户可以修改定制再发布:内核是实现多任务运行和硬件管理的基础:在我们使用应用程序时,在背后支持软件服务的是成千上万个Linux服务器主机. 实验二 Linux基础概念及操作 这一节首先学习了实验楼环境.终端的概念.和shell命令以及相关小技巧和快捷键.其中Shell是一种中间程序,即是用户交互的界…
2018-2019-1 20189221 <Linux内核原理与分析>第九周作业 实验八 理理解进程调度时机跟踪分析进程调度与进程切换的过程 进程调度 进度调度时机: 1.中断处理过程(包括时钟中断.I/O中断.系统调用和异常)中,直接调用schedule(),或者返回用户态时根据need_resched标记调用schedule(): 2.内核线程可以直接调用schedule()进行进程切换,也可以在中断处理过程中进行调度,也就是说内核线程作为一类的特殊的进程可以主动调度,也可以被动调度: 3…
#linux内核分析学习笔记 --第七章 可执行程序工作原理 学习目标:了解一个可执行程序是如何作为一个进程工作的. ELF文件 目标文件:是指由汇编产生的(*.o)文件和可执行文件. 即 可执行或可连接的文件.目标文件是已经适应某一种CPU体系结构上的二进制指令. 目标文件的格式可以分为: a.out COFF PE(windows)和ELF(linux) ELF就是可执行和可连接的格式,是一个目标文件的标准格式.ELF是一种对象文件格式,用于定义不同类型的对象文件中都有什么内容.以什么样的格…
课本:第八章 进程的切换和系统的一般执行过程 进行进程调度的时机 Linux内核通过schedule函数实现进程调度,schedule函数在运行队列中找到一个进程,把CPU分配给它 调用schedule函数一次就是调度一次,调用schedule函数的时候就是进程调度的时机 当内核即将返回用户空间时,内核会检查need_resched标志是否设置,若设置,则调用schedule函数,此时是从中断处理程序返回用户空间的时间点作为一个固定的调度时机点 内核线程是一个特殊进程,只有内核态没有用户态,内核…
课本:第七章 可执行程序工作原理 ELF目标文件格式 目标文件:编译器生成的文件. 目标文件的格式:out格式.COFF格式.PE(windows)格式.ELF(Linux)格式. ELF(Executable and Linkable Format)即可执行和可链接的格式,是一个目标文件格式的标准.ELF格式的文件用于存储Linux程序. ELF文件的3钟类型:可重定位文件.可执行文件.共享目标文件. 可重定位文件:这种一般是中间文件,还需要继续处理.由汇编器和编译器创建,一个源代码文件会生成…
2018-2019-1 20189221 <Linux内核原理与分析>第八周作业 实验七 编译链接过程 gcc –e –o hello.cpp hello.c / gcc -x cpp-output -S -o hello.s hello.cpp gcc -x assembler -c hello.s -o hello.o-m32 gcc -o hello hello.o 娄老师在第一次讲课时很生动的使用:"E->S->C"与"I->S->…
2018-2019-1 20189221 <Linux内核原理与分析>第七周作业 实验六 分析Linux内核创建一个新进程的过程 代码分析 task_struct: struct task_struct { volatile long state; //进程状态/* -1 unrunnable, 0 runnable, >0 stopped */ void *stack; // 指定进程内核堆栈 pid_t pid; //进程标识符 unsigned int rt_priority; /…
2018-2019-1 20189221 <Linux内核原理与分析>第六周作业 实验五 实验过程 将Fork函数移植到Linux的MenuOS fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程.在fork函数执行完毕后,如果创建新进程成功,则出现两个进程,一个是子进程,一个是父进程.在子进程中,fork函数返回0,在父进程中,fork返回新创建子进程的进程ID.通过fork返回的值来判断当前进程是子进程还是父进程. 启动MenuOS: 在test.c中添加代码如下: int…
2018-2019-1 20189221<Linux内核原理与分析>第五周作业 实验四 实验过程 当用户态进程调用一个系统调用时,cpu切换到内核态并开始执行一个内核函数. 在Linux中是通过int $0x80来执行系统调用的,这条汇编指令产生向量为128的编程异常 传参:内核实现了很多不同的系统调用,进程必须指明需要哪个系统调用,这需要传递一个名为系统调用号的参数(使用eax寄存器) 系统调用也需要输入输出参数,例如:实际的值.用户态进程地址空间的变量的地址.包含指向用户态函数的指针的数据…
2018-2019-1 20189221<Linux内核原理与分析>第四周作业 教材学习:<庖丁解牛Linux内核分析> 第 3 章 MenuOS的构造 计算机三大法宝:存储程序计算机,函数调用堆栈,中断 操作系统两把宝剑:中断上下文,进程上下文 Linux内核源代码: Linux内核使用的是第二周时下载的Linux-2.6版本 Linux内核目录: init目录下的main.c函数: start_kernel(): init_task(): rest_init(): 随书学习很有…
2018-2019-1 20189221<Linux内核原理与分析>第三周作业 实验二 完成一个简单的时间片轮转多道程序内核代码 实验过程 在实验楼中编译内核 编写mymain.c函数和myinterrupt.c函数实现时间片轮转调用 mymain.c: myinterrupt.c: make: 内核实现: 代码分析 代码使用的是<庖丁解牛Linux内核分析>书中代码: mypcb.h:定义了PCB结构体 #define MAX_TASK_NUM 4 #define KERNEL_…
读书报告 <庖丁解牛Linux内核分析> 第 1 章 计算工作原理 1.1 存储程序计算机工作模型 1.2 x86-32汇编基础 1.3汇编一个简单的C语言程序并分析其汇编指令执行过程 因为本科时期学过<微机原理与接口技术>课程,学习过8086/8088的汇编语言,所以基本上算是复习. 通用寄存器 EAX:累加器,是算术运算的主要寄存器,I/O指令使用该寄存器与外设传送信息 EBX:通用寄存器,常用作基址寄存器 ECX:通用寄存器,在循环时作为隐含的计数器 EDX:通用寄存器,可以…
Linux内核原理与分析 - 第一周作业 实验1 Linux系统简介 Linux历史 1991 年 10 月,Linus Torvalds想在自己的电脑上运行UNIX,可是 UNIX 的商业版本非常昂贵,于是他基于MINIX开发了初版的Linux.在之后越来越多的人加入其中,开发Linux. Linux与Windows的不同 Linux: 免费 支持开源自由软件 安全性较强 主要使用命令行 系统可定制 多用户和用户和用户组的规划 Linux学习步骤 Linux初级 Linux系统安装 Linux…
Linux内核分析 第二周学习 知识总结 操作系统与内核 操作系统 指在整个系统中负责完成最基本功能和系统管理的那些部分 内核 实际是操作系统的内在核心 内核独立于普通应用程序,拥有受保护的内存空间和访问硬件设备的所有权限,这种空间被称为内核空间 当内核运行的时候,系统以内核状态进入内核空间执行 当应用程序通过系统调用与内核通信时,我们称内核正在代其执行 应用程序称为通过系统调用在内核空间运行,内核被称为运行于进程上下文中 实际上,应用程序通常调用库函数,然后库函数通过系统调用界面,让内核完成不…
第一周作业::对Linux的基本知识进行了了解,并对基本操作进行熟悉和应用. 第二周作业::了解了冯诺依曼体系结构.各种寄存器的功能和汇编指令的作用和功能. 第三周作业::这周主要了解了Linux系统的架构,熟悉了常用的一些命令. 第四周作业::模拟了系统中的时钟中断. 第五周作业:::调试Linux内核,观察系统中代码的执行过程. 第六周作业::了解系统调用,并写一个C语言的代码嵌入系统调用命令. 第七周作业::将写好的系统调用程序部署到menu os上. 第八周作业::了解进程的执行和切换,…