linux内核代码注释 第三章引导启动程序 boot目录中的三个汇编代码文件   bootsect.s和setup.s采用近似intel的汇编语法,需要8086汇编器连接器as86和ld86 head.s用GNU的汇编程序格式   并且运行在保护模式下,需要GNU的as进行编译.为AT&T语法的汇编语言程序.GNU只支持386后的cpu  不支持实模式下的程序 总体功能 pc加电->cpu进入实模式->从0xfff0开始执行程序代码(bios地址),进行系统检测,并在物理地址0处开始初…
第三章  进程管理 姓名:王玮怡  学号:20135116 一.进程 1.进程的含义 进程是处于执行期的程序以及相关资源的总称,程序本身并不是进程,实际上就是正在执行的代码的实时结果.Linux内核通常把进程也叫“任务”. 2.线程的含义 执行线程简称线程,是在进程中互动的对象.内核调度的对象是线程而不是进程.Linux系统不区分线程和进程,线程只是一种特殊的进程. 3.进程的执行过程 (1)clone()调用fork(),通过复制一个现有进程来创建一个全新的进程,进程开始存活.其中调用fork…
第三章 进程管理 3.1 进程 1.进程: 进程就是处于执行期的程序. 进程就是正在执行的程序代码的实时结果. 进程是处于执行期的程序以及相关的资源的总称. 进程包括代码段和其他资源. 2.线程:执行线程,简称线程,是在进程中活动的对象. 内核调度的对象是线程而不是进程. Linux对线程并不特别区分,视其为特殊的进程. 3.在现代操作系统中,进程提供两种虚拟机制:虚拟处理器和虚拟内存.包含在同一个进程中的线程可以共享虚拟内存,但是每个都拥有各自的虚拟处理器. 4.几个函数 fork():创建新…
第三章 (由于linux不区分进程和线程,所以它们在linux中被称为task,也叫任务) 总结:本章主要包括进程以及线程的概念和定义,Linux内核如何管理每个进程,他们在内核中如何被列举,如何创建,最终如何消亡.操作系统存在的意义在于运行用户程序,进程管理是所有操作系统的心脏所在. 3.1进程 进程是处于执行期的程序,是正在执行的程序代码的实时结果.但不仅局限于一段可执行的代码,还包括其他资源(打开的文件,挂起的信号,内核内部数据,处理器的状态,一个或者多个内存映射的内存地址空间,一个或者多…
一.进程(任务)描述 1.进程是处于执行期的程序:除了可执行程序代码,还包括打开的文件.挂起的信号.内核内部数据.一个或者多个执行线程等多种资源 线程是在进程活动中的对象:内核调度的对象是线程而不是进程 在Linux系统中,并不区分线程和进程 可能存在两个或者多个进程执行的是同一个程序:甚至N个进程共享打开的文件.地址空间之类的资源 2.在现代操作系统中,进程提供两种虚拟机制:虚拟处理器和虚拟内存 同一进程中的线程之间可以共享虚拟内存,但是每个都拥有自己的虚拟存储器 3.进程概述 新创建的进程调…
一.进程 1.进程就是处于执行期的程序(目标码存放在某种存储介质上).但进程并不仅仅局限于一段可执行程序代码,通常进程还要包含其他资源.执行线程,简称线程(thread),是在进程中活动的对象. 2.每个线程都拥有一个独立的程序计数器.进程技和一组进程寄存器. 3.内核调度的对象是线程,而不是进程.对Linux 而言,线程是一种特殊的进程. 4.在现代操作系统中,进程提供两种虚拟机制:虚拟处理器和虚拟内存. 5.程序本身并不是进程,进程是处于执行期的程序以及相关的资源的总称. 6.Linux 系…
1.进程 进程就是正在执行的程序代码的实时结果,不仅包含可执行代码,还包括其他资源,比如:打开的文件,挂起的信号,内核内部数据结构,处理器状态,一个或多个具有内存映射的内存地址空间及一个或多个执行线程,全局变量数据段等. 内核需要有效而透明的管理所有细节. 线程,每个线程拥有一个独立的程序计数器,进程栈和一组寄存器.内核调度对象是线程而不是进程. 现代操作系统提供两种虚拟机制:虚拟处理器和虚拟内存,线程之间可以共享虚拟内存,但每个都有各自的虚拟处理器. Linux中,新进程是由fork()来实现…
3.1 进程 处于执行期的程序. 进程就是正在执行的程序代码的实时结果.内核需要有效而又透明地管理所有细节. 执行线程(简称线程):在进程中活动的对象.每个线程都拥有一个独立的程序计数器.进程栈和一组进程寄存器. 内和调度的对象是线程,而不是进程. 进程提供两种虚拟机制:虚拟处理器和虚拟内存. 3.2 进程描述符及任务结构 Linux通过slab分配器分配task_struct结构. 每个任务的thread_info结构在它的内核栈的尾端分配.结构中task域中存放的是指向该任务实际task_s…
这是我第三次阅读linux内核代码完全注释了,当然前两次也没有读完,第一次读到第五章,第二次第七章. 所以说,赵炯博士对我最大的帮助时介绍了intel386的结构,以及内核编程的方法. 至于真正的内核源代码,我还真没看多少. 前几天,就是上周周日,我终于完成我梦想的一小段的了,我的梦想是什么呢? 不妨贴一贴一年前发的微博. 我想做自己的计算机系统,本来这应该是一个简单的梦想,但是随着人们对效率的追求,如今的CPU再也不是典型的 架构,超流水线,寄存器重命名,乱序,预测. 如今,指令集作为软件和硬…
赵炯:男,1963年10月5日出生,江苏苏州人,汉族. 同济大学机械工程学院机械电子教研室副教授,从事教学和科研工作. 现在主要为硕士和博士研究生开设<计算机通信技术>.<计算机控制技术>.<现代电子学>等课程.    同时参与国家自然科学基金项目“系统芯片在线测试与容错技术研究”的工作.为国际计算机仿真协会.上海市通信学会会员.     主要研究方向为计算机网络协议分析与性能评估.操作系统体系结构和自动化系统中的智能控制技术. 至今已发表文章几十篇,出版书籍三本. 赵…
from:http://blog.csdn.net/jiang_dlut/article/details/8163731 中文版维护者: 张乐 Zhang Le <r0bertz@gentoo.org> 中文版翻译者: 张乐 Zhang Le <r0bertz@gentoo.org> 中文版校译者: 王聪 Wang Cong <xiyou.wangcong@gmail.com>                wheelz <kernel.zeng@gmail.co…
Chinese translated version of Documentation/CodingStyle   If you have any comment or update to the content, please post to LKML directly. However, if you have problem communicating in English you can also ask the Chinese maintainer for help.  Contact…
学习教材:LINUX内核完全注释,内核版本0.11,修正版V3.0 赵炯编著 参考教材:UNIX操作系统设计--M. J. Bach, programming the 80x86  --John H. Crawford MINIX操作系统的设计与实现--Andrew S.Tanenbaum --Tanenbaum 学习进度: 2013.11.28 前面的内容主要介绍,LINUX的起源和发展,这本书的独特之处,本书内容安排. 1.2 内容综述—PAGE21 本书内容安排. 2,1计算机组成原理—P…
以下只是个人看了<linux内核完全注释>的一点理解,如果有错误,欢迎指正! 1 eip中保存的地址是逻辑地址.线性地址还是物理地址? 这个应该要分情况.eip保存的是下一条要执行的指令地址,也就是说cpu是根据eip到内存中去寻找指定的内容.如果cpu工作在实模式,那么eip保存的就是物理地址:如果cpu工作在保护模式下,那么cpu在去内存寻找指定的内容之前要先将eip加上当前程序代码段的基址(通过当前cs所指向的代码段描述符获得),即获得当前程序的线性地址,如果cpu没有开启分页机制,那么…
嵌入式系统Linux内核开发工程师必须掌握的三十道题 如果你能正确回答以下问题并理解相关知识点原理,那么你就可以算得上是基本合格的Linux内核开发工程师,试试看! 1) Linux中主要有哪几种内核锁? Linux的内核锁主要是自旋锁和信号量. 自旋锁最多只能被一个可执行线程持有,如果一个执行线程试图请求一个已被争用(已经被持有)的自旋锁,那么这个线程就会一直进行忙循环——旋转——等待锁重新可用.要是锁未被争用,请求它的执行线程便能立刻得到它并且继续进行.自旋锁可以在任何时刻防止多于一个的执行…
目录 1.linux内核参数注释 2.两种修改内核参数方法 3.内核优化参数生产配置 参数解释由网络上收集整理,常用优化参数对比了网上多个实际应用进行表格化整理,使查看更直观. 学习linux也有不少时间了,每次优化linux内核参数时,都是在网上拷贝而使用,甚至别人没有列出来的参数就不管了,难道我就不需要了吗? 参考文章: linux内核TCP相关参数解释 http://os.chinaunix.net/a2008/0918/985/000000985483.shtml linux内核参数优化…
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内核原理与分析>第三周作业 教材学习总结 第三章 进程管理 进程是Unix操作系统抽象概念中最基本的一种,是正在执行的程序代码的实时结果:线程,是在进程中活动的对象.而Linux实现线程的机制非常独特,从内核的角度来说,它并没有线程的概念.Linux把所有的线程都当作进程来实现.在进程的创建中,Unix分解到两个单独的函数中去执行:fork()和exec(),Linux的fork()使用写时拷贝(copy-on-write)页实现.最后,内核释放它所占有的资源,在进程调用exit(…
linux内核参数注释与优化 原文:http://blog.51cto.com/yangrong/1321594 http://oldboy.blog.51.cto.com/2561410/1336488----CentOS(5.8/6.4)linux生产环境若干优化实战 目录 1.linux内核参数注释 2.两种修改内核参数方法 3.内核优化参数生产配置 参数解释由网络上收集整理,常用优化参数对比了网上多个实际应用进行表格化整理,使查看更直观. 学习linux也有不少时间了,每次优化linux…
0 总体介绍 一个完整的操作系统主要由4部分组成:硬件.操作系统内核.操作系统服务和用户应用程序,如图0.1所示.操作系统内核程序主要用于对硬件资源的抽象和访问调度. 图0.1 操作系统组成部分 内核的主要作用是为了与计算机硬件进行交互,实现对硬件部件的编程控制和接口操作,调度对硬件资源的访问,并为计算机上的用户程序提供一个高级的执行环境和对硬件的虚拟接口. 1 Linux内核模式 操作系统内核的结构模式主要可分为整体式的单内核模式和层次是的微内核模式.Linux 0.11采用了单内核模式. 如…
<Linux内核原理与分析>第三周作业 一.上周问题总结: 第二周头脑风暴完成较慢 虚拟机libc配置错误 书本知识使用不够熟练 二.本周学习内容: 1.实验楼环境虚拟一个x86的CPU硬件平台 在该环境下输入如下命令: cd LinuxKernel/linux-3.9.4 qemu -kernel arch/x86/boot/bzImage 实践截图如下: QEMU窗口截图如下: 查看mymain.c: 查看myinterrupt.c: 2.实验楼环境完成一个简单的时间片轮转机制内核: 代码…
文章目录 从编码风格错误开始 快速修改编码风格的工具 scripts/checkpatch.pl scripts/Lindent astyle Linux 内核代码风格 1) 缩进 2) 把长的行和字符串打散 3) 大括号和空格的放置 3.1) 空格 4) 命名 5) Typedef 6) 函数 7) 集中的函数退出途径 8) 注释 9) 你已经把事情弄糟了 10) Kconfig 配置文件 11) 数据结构 12) 宏,枚举和RTL 13) 打印内核消息 14) 分配内存 15) 内联弊病 1…
前言 一直有Linux kernel情节,之前也一直在看Linux kernel相关的书和代码,但是每次到最后又由于兴趣转变而荒废了.这次终于静下心来想把Linux内核相关的代码好好看看,算是对自己的一个沉淀吧.由于之前工作做的是分布式调度这块的东西,也稍微有过分布式文件系统相关的实习经历,所以阅读Linux内核代码的重心可能会往调度和文件系统这两大块倾斜. 个人感觉读读Linux kernel还是蛮有必要的,其实现在各种分布式框架.各种云计算,其实很多的思想都是借鉴Linux kernel的.…
朱宇轲 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 在本次的实验中,我们将通过简单分析Linux内核代码来探讨操作系统的启动过程. 计算机启动的过程其实在Andrew S.Tanenbaum所著的<现代操作系统>(中文版第18页)中就有大略的描述: 1.计算机启动时,存储在RAM中的BIOS程序检查计算机的所有设备,包括RAM.键盘.鼠标.ISA及PCI总线上的设…
http://blog.chinaunix.net/uid-20729583-id-1884617.html http://www.linuxidc.com/Linux/2014-08/105510.htm Linux内核代码的调试非常麻烦,一般都是加printk, 或者用JTAG调试.这里的方法是用QEMU来调试Linux内核.因为QEMU自己实现了一个gdb server, 所以可以非常方便的使用gdb来调内核. 这对内核的学习也非常有帮助. 为了尽量不多花时间在QEMU设置上,这里直接使用…
https://daniel.haxx.se/docs/sshproxy.html netsh wlan set hostednetwork mode=allow ssid=mywifi  key=12345678 开启成功后,网络连接中会多出一个网卡为“Microsoft Virtual WiFi Miniport Adapter”的无线连接2 单击已连接到Internet的网络连接,选择“属性”→“共享”,勾上“允许其他······连接(N)”并选择“无线连接2”. 如果此步报错,看服务里面…
原文网址:http://blog.chinaunix.net/uid-29589379-id-4708909.html 原文地址:linux内核移植和驱动添加(三) 作者:genehang 四,LED驱动的添加 1, 将led.c驱动文件拷贝到linux-3.1.4/drivers/char/目录下 root@char# pwd /change/linux-3.1.4/drivers/char root@char#  cp /mnt/hgfs/fh/driver/my_driver/led.c …
在linux内核代码开发中,头文件不能包含标准C头文件,只能采用GNC标准 而且内核开发中没有main函数,只有init 和 exit ,这是每个内核模块中必须要包含的函数模块. 在GNU C标准中,打印信息采用printk函数,printk函数有8种级别. 内核模块的编译采用Makefile来编译,利用内核的module中的makefile来编译 #include <linux/init.h> #include <module.h> //GPL是一种开源协议,这个必须要添加 MO…
全局描述符表GDT(Global Descriptor Table): (1)在整个系统中,全局描述符表(注意这里是表,表只有一张)GDT只有一张(一个处理器对应一个GDT). (2)GDT可以被放在内存的任何位置,但CPU必须知道GDT的入口,也就是基地址放在哪里,Intel的设计者门提供了一个寄存器GDTR用来存放GDT的入口地址,程序员将GDT设定在内存中某个位置之后,可以通过LGDT指令将GDT的入口地址装入此积存器,从此以后,CPU就根据此寄存器中的内容作为GDT的入口来访问GDT了.…