- 博客(15)
- 资源 (5)
- 问答 (1)
- 收藏
- 关注
转载 Syscall系统调用Linux内核跟踪
在Linux的用户空间,我们经常会调用系统调用,下面我们跟踪一下read系统调用,使用的Linux内核版本为Linux2.6.37。不同的Linux版本其中的实现略有不同。在一些应用中我们可以看到下面的一些定义:#define real_read(fd, buf, count ) (syscall(SYS_read, (fd), (buf), (count)))
2012-08-17 14:01:47 1154
转载 Linux中断处理体系结构分析(二)
1.中断处理的体系结构 我们知道编写设备驱动程序一定要用到中断处理函数,这在驱动程序的编写中,占据很重要的一部分。在响应一个特定的中断的时候,内核会执行一个函数,该函数叫做中断处理程序(interrupt handler)或中断服务例程(interrupt service routine ,ISP).产生中断的每个设备都有一个相应的中断处理程序,中断处理程序通常不和特定的设备关联,而
2012-08-17 14:00:30 1233
转载 Linux中断处理体系结构分析(一)
异常,就是可以打断CPU正常运行流程的一些事情,比如外部中断、未定义指令、试图修改只读的数据、执行swi指令(Software Interrupt Instruction ,软件中断指令)等。当这些事情发生时,CPU暂停当前的程序,先处理异常事件,然后再继续执行被中断的程序。操作系统中经常通过异常来完成一些特定的功能。其中的中断也占有很大的一部分。例如下面的这几种情况:当CPU执行未定义的
2012-08-17 13:59:22 556
转载 Linux进程地址空间
转自:http://blog.csdn.net/woshixingaaa/article/details/6326472 Linux进程地址空间 作者:李万鹏 内核使用内存描述符结构体表示进程的地址空间,该结构体包含了和进程地址空间有关的全部信息。内存描述符由mm_struct结构体表示,定义在文件中。
2012-08-16 14:55:32 711
转载 虚拟内存管理
我们知道操作系统利用体系结构提供的VA到PA的转换机制实现虚拟内存管理。有了共享库的基础知识之后,现在我们可以进一步理解虚拟内存管理了。首先分析一个例子:$ ps PID TTY TIME CMD29977 pts/0 00:00:00 bash30032 pts/0 00:00:00 ps$ cat /proc/29977/maps 080
2012-08-16 14:29:41 686
转载 内核源码学习:进程的虚拟空间
如前所述,每个进程拥有3G字节的用户虚存空间。但是,这并不意味着用户进程在这3G的范围内可以任意使用,因为虚存空间最终得映射到某个物理存储空间(内存或磁盘空间),才真正可以使用。那么,内核怎样管理每个进程3G的虚存空间呢?概括地说,用户进程经过编译、链接后形成的映象文件有一个代码段和数据段(包括data段和bss段),其中代码段在下,数据段在上。数据段中包括了所有静态分配的数据空间,即全局
2012-08-16 10:03:05 741
转载 Linux内存管理之slab机制(初始化)
一、内核启动早期初始化start_kernel()->mm_init()->kmem_cache_init() 执行流程: 1,初始化静态initkmem_list3三链; 2,初始化cache_cache的nodelists字段为1中的三链; 3,根据内存情况初始化每个slab占用的页面数变量slab_break_gfp_order; 4,将cache
2012-08-15 11:47:56 912
转载 linux内存管理之伙伴系统(内存分配)
一、Linux伙伴系统分配器伙伴系统分配器大体上分为两类。__get_free_pages()类函数返回分配的第一个页面的线性地址;alloc_pages()类函数返回页面描述符地址。不管以哪种函数进行分配,最终会调用alloc_pages()进行分配页面。 为清楚了解其分配制度,先给个伙伴系统数据的存储框图 也就是每个order对应一个free_area结构,fr
2012-08-15 11:44:08 1100
转载 linux内存管理之伙伴系统(建立)
内核使用伙伴系统来解决内存分配引起的外部碎片问题。一、数据结构描述 结构zone中的free_area数组描述伙伴系统该数组为free_area结构 www.2cto.comstruct zone { …… struct free_area free_area[MAX_ORDER]; …… }; www.2cto.comstruct f
2012-08-15 11:41:32 895
转载 Linux内存管理之伙伴系统(内存释放)
Linux内核伙伴系统中页面释放,主函数为free_pages() 一、上层操作 www.2cto.com/*用虚拟地址进行释放*/ void free_pages(unsigned long addr, unsigned int order) { if (addr != 0) { VM_BUG_ON(!virt_addr_valid((
2012-08-15 11:39:00 1395
转载 linux内核V2.6.11学习笔记(3)--switch_to宏
这一节可以很长,也可以很短.要写长是因为这里有不少细节可以写,要写短是因为如果不关注细节,而只关注基本的原理,那么几句话就可以说完了.坦白的说,细节部分我还没有完全吃透,即使是>一书,讲到这部分也费了不少篇幅.因为我在第一遍阅读时阅读速度要尽可能的加快,一些不太明白的细节暂且放过去,等精读第一遍完毕了再继续深入,所以我选择了长话短说.switch_to宏用于进程切换,给定了前一个进程结
2012-08-14 11:22:23 1873
转载 linux内核学习笔记【一】临时内核页表 Provisional kernel Page Tables
最近开始学习linux内核,看了《深入理解linux内核》,开始写点学习收获。内核版本为2.6.11 临时全局目录(provisional page global directory)是在内核编译过程中静态初始化的,而临时页表是由startup_32()汇编语言函数(定义于arch/i386/kernel/head.S)初始化的。临时页全局目录放在swapper_pg_dir变量中,sw
2012-08-13 16:17:30 1174
转载 linux 启动过程临时页表到底映射了多大内存
从 linux-2.4内核开始,在建立临时页表的时候,一般的教科书都说是映射了8M的物理内存,但是为什么是映射8M呢?当时网上有资料说,8M足够了,但为什么就足够了,一直没有彻底搞清楚,今天又重新分析这部分的代码(linux-2.6.24)。 先看下面内存布局图:文章出处:飞诺网(www.diybl.com):http://www.diybl.com/course/6_system/linux
2012-08-13 16:14:16 711
pushAACFile_toRTMP
2016-02-24
mediasoup udp 单端口方案设计问题
2021-12-03
TA创建的收藏夹 TA关注的收藏夹
TA关注的人