LINUX内核学习总结姓名:李冬辉学号:20133201注: 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 对Linux系统的理解:Linux系统是一个支持多用户,多线程的优秀的操作系统,功能非常强大和完善,这些功能都是由Linux内核提供的。经过多年的发展,Linux内核被精简优化,已经形成了完备的体系。它向用户提供以下几个方面的功能保障:内存管理,进程调度,文件系统,设备管理...
本篇文章主要是就swappiness的一个源码上的解析(基于kernel版本 v4.14-13151-g5a787756b809),仅为个人见解,有不足欢迎相互交流。
关于Swap和swappinessSwap(交换分区)是操作系统就内存不足的一个缓解。当内存紧张时候,会适当的根据一些配置值和当前的统计值进行一次判断,会把一些anon内存(分配出去的内存)交换到Swap分区中。Swappiness是系统的一个参数,可以调节swap的使用优先级。Linux文档描述如下:swappinessThis con...
一、简介内核开发比用户空间开发更难的一个因素就是内核调试艰难。内核错误往往会导致系统宕机,很难保留出错时的现场。调试内核的关键在于你的对内核的深刻理解。 二、方法总结1)调试方法总结http://my.oschina.net/fgq611/blog/113249
/*
*File : test.c
*Author : DavidLin
*Date : 2014-12-07pm
*Email : linpeng1577@163.com or linpeng1577@gmail.com
*world : the city of SZ, in China
*Ver : 000.000.001
*history : editor time do
* 1)LinPeng 2014-12-07 created this file!
* 2)
*/1.获得root权限:su root;2.make ...
本文参考代码:Linux-5.10 要回答这个问题, 根源还是要搞清楚struct page结构是在哪里,如何分配的。 就当前的Linux而言,几乎都采用的是SPARSEMEM内存模型进行管理。直接一点,struct page的分配就是在sparse_init()这个函数中完成的。/** Allocate the accumulated non-linear sections, allocate a mem_map* for each and record the physical to section mapping.*/void __init sparse_init(void)
{unsigned long pn...
一、实验使用gcc –S –o main.s main.c -m32命令编译成汇编代码,如下代码中的数字请自行修改以防与他人雷同 1int g(int x)2{3return x + 3;4}5int f(int x)6{7return g(x);8}9int main(void)
10{
11return f(8) + 1;
12 }修改过后源代码:经过编译过的原始汇编代码:简单地汇编代码: 1g:2 pushl %ebp3 movl %esp, %ebp4 movl 8(%ebp), %eax5 addl $4, %eax6 popl %ebp7 ret8f:9 pus...
系统环境:linux kernel 2.6.35。(此环境是上一篇文章中将ubuntu内核替换后的环境)编译过程如下:1)首先需要下载patch文件:linux-kernel-v2.6.35-mpls1.980.patch。下载链接:http://ftp.jaist.ac.jp/pub/sourceforge/m/project/mp/mpls-linux/mpls-linux/Patches/linux-kernel-v2.6.35.13-mpls1.980.patch或者:http://zh.sourceforge.jp/projects/sfnet_mpls-linux/downloads/mpls-linux/Patches/linux-kernel-v2.6.35.13-mp...
设备与模块关于设备驱动和设备管理,四种内核成分。设备类型:在所有Unix 系统中为了统一普通设备的操作所采用的分类.模块: Linux 内核中用于按需加载和卸载目标码的机制.内核对象:内核数据结构中支持面向对象的简单操作,还支持维护对象之间的父子关系。sysfs :表示系统中设备树的一个文件系统。17 .1 设备类型在Linux 以及所有Unix 系统中,设备被分为以下三种类型块设备字符设备网络设备块设备通常缩写为blkdev,它是可寻址...
一、测试源程序:【 list.h 文件 】 1#ifndef _LIST_HEAD_2#define _LIST_HEAD_3 4/* 链表节点结构 */ 5struct list_head {6struct list_head *prev;7struct list_head *next;8};910/* 初始化链表 */11#define LIST_HEAD_INIT(name) 12 {&(name), &(name)}
1314/* 创建链表并初始化 */15#define LIST_HEAD(name) 16struct list_head name = LIST_HEAD_INIT(name)
1718/* 得到结构体头至某成员的偏移量 */19#define offseto...
内存管理页内核把物理页作为内存管理的基本单位。内存管理单元(MMU,管理内存并把虚拟地址转换为物理地址)通常以页为单位进行处理。MMU以页大小为单位来管理系统中的页表。从虚拟内存的角度看,页就是最小单位。32位系统:页大小4KB64位系统:页大小8KB在支持4KB页大小并有1GB物理内存的机器上。物理内存会被划分为262144个页。内核用 struct page 结构表示系统中的每一个物理页。struct page { page_flags_t flags; /* 表示...
1,系统调用的概念:是用户空间访问内核的唯一手段,系统调用依靠软件中断实现,每个系统调用被赋予一个系统调用号,用来指明要执行哪个系统调用。2,系统调用的实现:系统调用是通过软中端(SWI)实现的,SWI指令SWI指令的格式为:SWI{条件} 24位的立即数SWI指令用于产生软件中断,以便用户程序能调用操作系统的系统例程。操作系统在SWI的异常处理程序中提供相应的系统服务,指令中24位的立即数指定用 户程序调用系统例程的类型,...
1. 前言我们在那些需要和用户空间交互大量数据的子系统(例如MMC[1]、Video、Audio等)中,经常看到scatterlist的影子。对我们这些“非英语母语”的人来说,初见这个词汇,脑袋瞬间就蒙圈了。scatter可翻译成“散开、分散”,list是“列表”的意思,因而scatterlist可翻译为“散列表”。“散列表”又是什么?太抽象了!之所以抽象,是因为这个词省略了主语----物理内存(Physical memory),加上后,就好理解了多了,既:物理内存的...
本文分析基于Linux Kernel 1.2.13原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7492423更多请看专栏,地址http://blog.csdn.net/column/details/linux-kernel-net.html作者:闫明注:标题中的”(上)“,”(下)“表示分析过程基于数据包的传递方向:”(上)“表示分析是从底层向上分析、”(下)“表示分析是从上向下分析。 上一篇博文中我们从宏观上分析了Linux内核中网络栈的初始化过程,这里我们再...
实验作业:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用20135313吴子怡.北京电子科技学院【第一部分】使用库函数API来获取用户标识号。库函数为getuid() 代码如下:编译运行之后,将用户id号1000打印输出在屏幕上。 【第二部分】使用汇编方式触发系统调用来获取用户标识号。库函数依旧为getuid() 代码如下:可以看出,打印出来的用户id和之前的一样都是1000.【第三部分】系统调用的工作机制学习总结我认为系统调...
高并发的影响因素除了硬件,Web服务器外,操作系统对TCP相关参数的配置也会对其有很大影响。
默认情况下Linux内核参数是考虑通用场景的(如ulimits -n 限定为1024),这在高并发访问的Web服务器下会造成影响。所以一般需要进行内核参数的调整,来使Web服务器(如Nginx)可以支持更高的并发。先来回顾一下TCP的三次握手与四次挥手过程:有了以上说明,我们来看如何修改以及需要修改哪些参数。
修改方式有sysctl命令及sysctl.conf两种:
1、...