LINUX内核完全注释】的更多相关文章

以下只是个人看了<linux内核完全注释>的一点理解,如果有错误,欢迎指正! 1 eip中保存的地址是逻辑地址.线性地址还是物理地址? 这个应该要分情况.eip保存的是下一条要执行的指令地址,也就是说cpu是根据eip到内存中去寻找指定的内容.如果cpu工作在实模式,那么eip保存的就是物理地址:如果cpu工作在保护模式下,那么cpu在去内存寻找指定的内容之前要先将eip加上当前程序代码段的基址(通过当前cs所指向的代码段描述符获得),即获得当前程序的线性地址,如果cpu没有开启分页机制,那么…
目录 1.linux内核参数注释 2.两种修改内核参数方法 3.内核优化参数生产配置 参数解释由网络上收集整理,常用优化参数对比了网上多个实际应用进行表格化整理,使查看更直观. 学习linux也有不少时间了,每次优化linux内核参数时,都是在网上拷贝而使用,甚至别人没有列出来的参数就不管了,难道我就不需要了吗? 参考文章: linux内核TCP相关参数解释 http://os.chinaunix.net/a2008/0918/985/000000985483.shtml linux内核参数优化…
赵炯:男,1963年10月5日出生,江苏苏州人,汉族. 同济大学机械工程学院机械电子教研室副教授,从事教学和科研工作. 现在主要为硕士和博士研究生开设<计算机通信技术>.<计算机控制技术>.<现代电子学>等课程.    同时参与国家自然科学基金项目“系统芯片在线测试与容错技术研究”的工作.为国际计算机仿真协会.上海市通信学会会员.     主要研究方向为计算机网络协议分析与性能评估.操作系统体系结构和自动化系统中的智能控制技术. 至今已发表文章几十篇,出版书籍三本. 赵…
学习教材: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内核参数注释与优化 原文: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…
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处开始初…
前言 一直有Linux kernel情节,之前也一直在看Linux kernel相关的书和代码,但是每次到最后又由于兴趣转变而荒废了.这次终于静下心来想把Linux内核相关的代码好好看看,算是对自己的一个沉淀吧.由于之前工作做的是分布式调度这块的东西,也稍微有过分布式文件系统相关的实习经历,所以阅读Linux内核代码的重心可能会往调度和文件系统这两大块倾斜. 个人感觉读读Linux kernel还是蛮有必要的,其实现在各种分布式框架.各种云计算,其实很多的思想都是借鉴Linux kernel的.…
0 总体介绍 一个完整的操作系统主要由4部分组成:硬件.操作系统内核.操作系统服务和用户应用程序,如图0.1所示.操作系统内核程序主要用于对硬件资源的抽象和访问调度. 图0.1 操作系统组成部分 内核的主要作用是为了与计算机硬件进行交互,实现对硬件部件的编程控制和接口操作,调度对硬件资源的访问,并为计算机上的用户程序提供一个高级的执行环境和对硬件的虚拟接口. 1 Linux内核模式 操作系统内核的结构模式主要可分为整体式的单内核模式和层次是的微内核模式.Linux 0.11采用了单内核模式. 如…
as86汇编器 1.来源与对于linux的用途 as86来源minix-386开发的intel 8086.80386汇编编译程序和链接程序,他主要为linux创建16位的启动引导扇区程序boot/bootsect.s和实模式下初始设置程序boot/setup.s的二进制执行代码. 2.语法 as86语法是基于minix系统的汇编 语言语法,与gnu as汇编器的语法不兼容 汇编的命令基本格式: as [option] -o objfile srcfile 3.语句 汇编语言程序srcfile是一…
c程序的编译和链接 使用gcc汇编器编译c语言程序时通常会经历四个阶段,即预处理阶段.编译阶段.汇编阶段.链接阶段,如下图. 例如: gcc -o hello hello.c 生成可执行文件hello gcc -S -o hello.s hello.c gcc -c -o hello.o hello.c 嵌入式汇编(内联汇编) 1.格式 asm("汇编语句" :输出寄存器 :输入寄存器 :会被修改的寄存器) asm是内联汇编语句的关键词:输出寄存器与输入寄存器都分别对应着一个C变量或常…
计算机组成原理 1.传统计算机计算机组成框图 CPU通过地址线.数据线.控制线组成的本地总线(或内部总线),与系统的其他部分进行数据通信,地址线用于提供内存或I/O设备的地址,指明所需读写数据的具体操作位置.数据线用于在CPU和内存或I/O之间的数据传输通道:控制线用于控制内存与I/O的具体读写操作 内存的大小由地址线的位数决定:如32位232字节,共4GB 下方的各种控制卡(也可成适配卡)是通过扩展插槽与系统总线进行连接,总线插槽是系统地址线.数据总线.控制总线与扩展设备控制器的标准接口.总线…
固定文件的内核参数 下列文件所在目录: /proc/sys/net/ipv4/ 名称 默认值 建议值 描述 tcpsyn_retries 5 1 对于一个新建连接,内核要发送多少个SYN连接请求才决定放弃.不应该大于255,默认值是5,对应于180毫秒左右时间.(对于大负载而物理通信良好的网络来说,这个值偏高,可以修改为2.这个值仅仅是针对对外的连接,对进来的连接,是由tcp_retries1决定) tcp_synack_retries 5 1 对于远端的连接请求SYN,内核会发送SYN+ACK…
Linux在系统运行时修改内核参数(/proc/sys与/etc/sysctl.conf),而不需要重新引导系统,这个功能是通过/proc虚拟文件系统实现的. 在/proc/sys目录下存放着大多数的内核参数,并且设计成可以在系统运行的同时进行更改, 可以通过更改/proc/sys中内核参数对应的文件达到修改内核参数的目的(修改过后,保存配置文件就马上自动生效),不过重新启动机器后之前修改的参数值会失效,所以只能是一种临时参数变更方案.(适合调试内核参数优化值的时候使用,如果设置值有问题,重启服…
web 服务负载均衡器常规网站服务器优化的基本配置: net.ipv4.tcp_fin_timeout =2 net.ipv4.tcp_tw_reuse =1 net.ipv4.tcp_tw_recycle =1 net.ipv4.tcp_syncookies =1 net.ipv4.tcp_keepalive_time =600 net.ipv4.ip_local_port_range =4000 65000 net.ipv4.tcp_max_syn_backlog =16384 net.ip…
内核参数 说明 net.ipv4.tcp_max_syn_backlog = 2048 增大队列SYN最大半连接数; 对于那些依然还未获得客户端确认的连接请求,需要保存在队列中最大数目.默认值是1024,可提高到2048. net.ipv4.tcp_tw_reuse = 1 开启重用; 是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接,即开启重用.默认为0,表示关闭 net.ipv4.tcp_tw_recycle = 1 开启TCP连接中TIME-WAIT socket…
来源:http://blog.csdn.net/eastmoon502136/article/details/8711104 推荐阅读:linux内核源码最初版linux内核源代码,简单易懂,适合初学者  http://download.csdn.net/download/are2008/2001389 注:以下大部分内容摘自linux内核编程入门篇和linux内核完全注释 在工作的这段时间,发现我的visio画图熟悉了点点,总喜欢把什么源码啊,结构啊之类的就当作流程图来画来理解,因为对于图,有…
1.linux内核参数注释 2.两种修改内核参数方法 3.内核优化参数生产配置 1.linux内核参数注释 以下表格中红色字体为常用优化参数 根据参数文件所处目录不同而进行分表整理 下列文件所在目录:/proc/sys/net/ipv4/ 名称 默认值 建议值 描述 tcp_syn_retries 5 1 对于一个新建连接,内核要发送多少个 SYN 连接请求才决定放弃.不应该大于255,默认值是5,对应于180秒左右时间..(对于大负载而物理通信良好的网络而言,这个值偏高,可修改为2.这个值仅仅…
最近决定开始阅读Linux 0.11的源代码. 学习Linux操作系统的核心概念最好的方法莫过于阅读源代码.而Linux当前最新的源代码包已经有70MB左右,代码十分庞大,要想深入阅读十分困难.而Linux早期的0.11版本虽然有诸多局限,但是具备了现代操作系统的完备功能,一些基本概念沿用到了当前版本,并且代码只有300KB,非常适合阅读. 阅读源代码之前首先需要搭建实验环境,由于Linux 0.11的代码是二十年前编写的,当前版本的gcc编译器无法正常编译通过,因此需要首先将Linux 0.1…
这是我第三次阅读linux内核代码完全注释了,当然前两次也没有读完,第一次读到第五章,第二次第七章. 所以说,赵炯博士对我最大的帮助时介绍了intel386的结构,以及内核编程的方法. 至于真正的内核源代码,我还真没看多少. 前几天,就是上周周日,我终于完成我梦想的一小段的了,我的梦想是什么呢? 不妨贴一贴一年前发的微博. 我想做自己的计算机系统,本来这应该是一个简单的梦想,但是随着人们对效率的追求,如今的CPU再也不是典型的 架构,超流水线,寄存器重命名,乱序,预测. 如今,指令集作为软件和硬…
简介 Linux内核使用 Sphinx 实现把 Documentation 目录下的 reStructuredText 文件转换为非常漂亮的文档.文档既可以通过 make htmldocs 转换成 HTML 格式,也可以通过 make pdfdocs 转换为 PDF 格式. 转换生成的文档存放于 Documentation/output 目录下. Linux内核强大的文档功能,除了直接转换 .rst文档之外,还能从源码中汲取API说明,结构体说明等信息.当然要做到这样,源码的注释是有一定要求的.…
[5216 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000] WEEK NINE (4.18--4.24)期中总结 SECTION 0 学习目录 第一周<计算机是如何工作的?>http://www.cnblogs.com/lwr-/p/5211491.html 第二周<操作系统是如何工作的?> http://www.cnblogs.com/lwr-/p/52356…
写在前面 宗旨:把话说清楚,把道理讲透彻. 约定:所有代码均来自Linux内核2.6.24版. 建议:本文介绍得十分详细,但也略显繁琐,读者可以先看“Ⅴ.总结”部分带注释的源码,如果哪里不清楚,再回头看详细解释. 正文 预备知识 位图: 在Linux下,从数据结构上看,位图本质上是一个数组,数组的每个元素都是long型的(即32bit或64bit). 假设在32位系统下,某long型数组有128个元素,那么,从逻辑上看,这个数组就是一个128行×32列的bit阵列,就是所谓的位图,见下面的示意图…
Linux第四周作业 1. 堆栈知识 首先回顾了下堆栈相关的知识,堆栈机制是高级语言可以运行的一个基础,这一块需要重点掌握.函数发生调用时,如图 call指令:将eip的按顺序执行的下一条指令(因为在执行call的时候,eip保存的是call语句下一条指令的地址)的地址保存在当前栈顶,然后设置eip的值为要跳转到的函数的开始的地址 ret指令:将之前使用call指令的保存在栈里面的地址恢复到eip中去. 2.实验相关 用自己的Ubuntu来搭建实验所需要的环境.但是在使用用apt-get命令安装…
我们在阅读Linux内核是,常见到这些宏 __init, __initdata, __initfunc(), asmlinkage, ENTRY(), FASTCALL()等等.它们定义在 /include/linux/init.h 和 /include/linux/linkage.h 以及其他一些.h 文件中. 1. __init 位置:/include/linux/init.h 定义: #define __init   __attribute__ ((__section__ (".init.…
第一节 - 一般性问题 1. 为什么有些时候使用“GNU/Linux"而另一些时候使用“Linux”? 答:在这个FAQ中,我们尝试使用“linux”或者“linux kernel”来表示内核,而GNU/Linux用于表示整个GNU/GPL的操作系统软件.我们需要分清:) FAQ的目的是提供linux内核更多的信息并避免语义上的歧义.更多GNU软件和linux关系的讨论可以在http://www.gnu.org/gnu/linux-and-gnu.html获取.看上去很多人都忽视了linux内核…
一   实验过程及效果 1.准备好相关的代码,分别是mymain.c,mypcb.h,myinterrupt.c ,如下图,make make成功: 在qemu创建的虚拟环境下的运行效果:(使用的命令如上图所示) 效果分析:可以看到进程在不断切换,分别有进程0,1,2,3,每隔一段时间就进行一次切换. 二  具体代码 mypcb.h #define MAX_TASK_NUM 4 //定义最大任务(进程数) #define KERNEL_STACK_SIZE 1024*8 //定义内核堆栈的大小…
非阻塞型同步 (Non-blocking Synchronization) 简介 如何正确有效的保护共享数据是编写并行程序必须面临的一个难题,通常的手段就是同步.同步可分为阻塞型同步(Blocking Synchronization)和非阻塞型同步( Non-blocking Synchronization). 阻 塞型同步是指当一个线程到达临界区时,因另外一个线程已经持有访问该共享数据的锁,从而不能获取锁资源而阻塞,直到另外一个线程释放锁.常见的同步原语有 mutex.semaphore 等.…
关于链表我们更多时候是对其进行遍历的需求,上一篇博文里我们主要认识了一下和链表操作比较常用的几个内核API接口,其入参全都是清一色的struct list_head{}类型.至于链表的遍历,内核也有一组基本的接口(其实都是宏定义的)供开发者调用. 首先是list_for_each(pos, head),参数pos是需要开发者在外部提供的一个临时struct list_head{}类型的指针对象,类似于for循环的i.j.k之类的游标,head是我们要遍历的链表头.常见用法: 点击(此处)折叠或打…
我们都知道Linux内核里的双向链表和学校里教给我们的那种数据结构还是些不一样.Linux采用了一种更通用的设计,将链表以及其相关操作函数从数据本身进行剥离,这样我们在使用链表的时候就不用自己去实现诸如节点的插入.删除.遍历等操作了.当然,Linux也是从2.1.x内核开始才对链表进行了这样的统一,和我们目前看到的样子几乎差不多: 点击(此处)折叠或打开 struct list_head { struct list_head *next, *prev; }; 在2.6.21里这个数据结构定义在i…
一.内容分析 1.可执行文件的创建 (1)预处理阶段 预处理过程读入源代码,检查包含预处理指令的语句和宏定义,并对源代码进行相应的转换,预处理过程还会删除程序中的注释和多余的空白字符.其中预处理指令主要包括以下四个方面: 宏定义指令——预处理过程会把源代码中出现的宏标识符替换成宏定义时的值,常用的两种宏定义: //声明一个标识符,全部用大写字母来定义宏 #define MAX_NUM 10 //带参数的#define指令(宏函数) #define Cube(x) ((x)*(x)) ; i=Cu…