
Linux高级
Lawrence_121
千里之行,始于足下
展开
-
Linux内核空间内存申请函数kmalloc,kzalloc,vmalloc
转自:http://www.th7.cn/system/lin/201606/167750.shtml 我们都知道在用户空间动态申请内存用的函数是 malloc(),这个函数在各种操作系统上的使用是一致的,对应的用户空间内存释放函数是 free()。注意:动态申请的内存使用完后必须要释放,否则会造成内存泄漏,如果内存泄漏发生在内核空间,则会造成系统崩溃。 那么,在内核空间中如何申...转载 2018-08-04 16:51:52 · 361 阅读 · 0 评论 -
Linux内核并发机制----原子操作
并发机制的由来: 很多人会问这样的问题,Linux内核中提供了各式各样的锁机制到底有何作用?追根到底其实是由于操作系统中存在多进程对共享资源的并发访问,从而引起了进程间的竞态。这其中包括了我们所熟知的SMP系统,多核间的相互竞争资源,单CPU之间的相互竞争,中断和进程间的相互抢占等诸多问题。原子概念: 所谓的原子操作,就是该操作绝不会在执行完毕前被任何其他任务...原创 2018-08-04 16:30:11 · 951 阅读 · 0 评论 -
fork()+execve():一个进程的诞生
①fork()系统调用: 进程调用fork()创建一个新的进程,新进程复制了父进程的task_struct(PCB,process control block,进程控制块),以及task_struct中的各个子模块,比如内核堆栈等,然后对各个子模块做了修改。系统调用通过eax寄存器保存返回值,fork()系统调用结束后从内核态返回两次,一次是父进程返回,一次是子进程返回,区分父子进程的方...转载 2018-07-22 10:59:49 · 1338 阅读 · 0 评论 -
Linux下逻辑地址-线性地址-物理地址图解
一、逻辑地址转线性地址 机器语言指令中出现的内存地址,都是逻辑地址,需要转换成线性地址,再经过MMU(CPU中的内存管理单元)转换成物理地址才能够被访问到。我们写个最简单的hello world程序,用gccs编译,再反编译后会看到以下指令:mov 0x80495b0, %eax这里的内存地址0x80495b0 就是一个逻辑地址,必须加上隐含的DS 数据段的基地址,...转载 2018-07-21 16:58:36 · 1047 阅读 · 0 评论 -
Linux系统的文件系统详解
Linux系统文件系统:1、文件系统介绍 文件系统是linux的一个十分基础的知识,同时也是学习linux的必备知识。 本文将站在一个较高的视图来了解linux的文件系统,主要包括了linux磁盘分区和目录、挂载基本原理、文件存储结构、软链接硬链接、和常见目录的介绍。相信有了这些知识对于深入的学习linux会有一定的帮助。Linux文件管理从用户的层面介绍了Linux管理文件的方式。L...转载 2018-07-13 22:35:49 · 283 阅读 · 0 评论 -
虚拟内存的由来
引言: 我比较喜欢搞清楚一个技术本身的发展历程,简而言之就是这个技术是怎么发展而来的,在这个技术之前存在哪些技术,这些技术有哪些特点,为什么会被目前的技术所取代,而目前的技术又解决了之前的技术所存在的哪些问题。弄清楚了这些,我们才能比较清晰的把握某一项技术。有些资料在介绍某个概念的时候直接就介绍这个概念的意义,原理,而对其发展过程和背后的原理丝毫不提,仿佛这个技术从天上掉...转载 2018-07-21 17:21:45 · 652 阅读 · 0 评论 -
LKM详解
I.基础知识1.什么是LKM 2.什么是系统调用3.什么是内核符号表4.如何进行内核与用户空间内存数据的交换5.使用用户空间的各种函数方法6.常用内核空间函数列表7.什么是内核后台进程8.创建自己的设备II.深入探讨1.如何截获系统调用2.哪些系统调用应被截获2.1 寻找重要的系统调用(strace命令方法)3.迷惑内核系统表4.针对文件系统的黑客方法4.1 如何隐藏...转载 2018-07-23 21:54:48 · 10350 阅读 · 0 评论 -
LKM入门实例
1.LKM概述: LKM:可加载内核模块,是一段运行在内核空间的代码,可以动态加载,无须重新实现整个 内核。2.相关操作: ①加载内核模块:insmod ②卸载内核模块:rmmod ③查看内核模块:lsmod3.模块声明: ① MODULE_LICENSE("GPL"):内核可以识别的许可证(任意版本GNU通用公共许可证),GPL v2等。...原创 2018-07-23 20:49:49 · 2942 阅读 · 0 评论 -
Linux的虚拟文件系统(一)
1 引言Linux 中允许众多不同的文件系统共存,如 ext2, ext3, vfat 等。通过使用同一套文件 I/O 系统 调用即可对 Linux 中的任意文件进行操作而无需考虑其所在的具体文件系统格式;更进一步,对文件的 操作可以跨文件系统而执行。如图 1 所示,我们可以使用 cp 命令从 vfat 文件系统格式的硬盘拷贝数据到 ext3 文件系统格式的硬盘;而这样的操作涉及到两个不同的...转载 2018-07-18 20:39:21 · 193 阅读 · 0 评论 -
linux内核文件系统的高速缓冲机制
为什么需要高速缓冲区而不是直接访问块设备中的数据。 这是因为,IO设备和内存之间的读写速度不匹配而且有一点数据需要写入或者读出磁盘就需要访问磁盘,磁盘很容易损坏。而高速缓冲区就起到了一个中间过程的作用,把数据存在高速缓冲区,需要读取磁盘上的数据时,尝试匹配高速缓冲区中的数据,匹配成功了,那就直接从高速缓冲区中取数据,然后内核再来操作,如果是要存入缓冲区,再存入磁盘,这样就避免了每次都对...原创 2018-06-18 18:08:25 · 872 阅读 · 0 评论 -
LD_PRELOAD用法
LD_PRELOAD,是个环境变量,用于动态库的加载,动态库加载的优先级最高,一般情况下,其加载顺序为LD_PRELOAD>LD_LIBRARY_PATH>/etc/ld.so.cache>/lib>/usr/lib。程序中我们经常要调用一些外部库的函数,以open()和execve()为例,如果我们有个自定义这两函数,把它编译成动态库后,通过LD_PRELOA...原创 2018-06-03 21:14:33 · 22658 阅读 · 1 评论 -
Linux时间系统
时间系统计算机最基本的时间单元是时钟周期,例如取指令、执行指令、存取内存等。时间系统是计算机系统非常重要的组成部分,特别是对于Unix类分时系统尤为重要。时间系统主要任务是维持系统时间并且防止某个进程独占CPU及其他资源,也就是驱动进程的调度。时钟硬件大部分PC机中有两个时钟源,他们分别叫做RTC和OS(操作系统)时钟。RTC(Real Time Clock,实时时钟)也叫做CMOS时钟,它是PC...转载 2018-05-21 20:34:25 · 769 阅读 · 0 评论 -
Linux进程调度及初始化(0.11版本源码分析)
创建进程时,进程调度类的初始化在函数sched_init()进行void sched_init(void){ int i; struct desc_struct * p; if (sizeof(struct sigaction) != 16) panic("Struct sigaction MUST be 16 bytes"); //设置内核的局部状态 描述符和程序状...原创 2018-05-20 13:00:16 · 1891 阅读 · 0 评论 -
Linux内核并发机制----自旋锁,读写锁,顺序锁
基本概念:并发:多个执行单元同时发生“执行单元”:硬件中断、软中断、进程竞态:多个执行单元同时访问共享资源产生竞态产生竞态的条件:1,必须有多个执行单元2,必须有共享资源3,必须同时访问共享资源:硬件资源(驱动程序中但凡设计的寄存器都是共享资源)和软件上的全局变量互斥访问:当有多个执行单元要访问共享资源的时候,只允许一个执行单元访问共享资源,其他执行单元禁止访问!临界区:访问...原创 2018-08-16 17:37:03 · 2764 阅读 · 1 评论