linux杂记
文章平均质量分 85
qq308845474
这个作者很懒,什么都没留下…
展开
-
汇编浮点运算指令集
st(i):代表浮点寄存器,所说的出栈、入栈操作都是对st(i)的影响 src,dst,dest,op等都是指指令的操作数,src表示源操作数,dst/dest表示目的操作数 mem8,mem16,mem32,mem64,mem80等表示是内存操作数,后面的数值表示该操作数的内存位数(8位为一字节) x 1. 数据传递和对常量的操作指令指令格式 指令含义 执行的操作FLD转载 2015-10-13 21:57:15 · 553 阅读 · 0 评论 -
Linux汇编语言及嵌入式汇编
汇编语言的优点是速度快,可以直接对硬件进行操作。Linux是用C语言开发的操作系统,可以在Linux中直接使用汇编这一底层语言来优化程序的性能。汇编语言虽然运用不像高级语言那么广泛,但是却很重要。特别是在一些执行速度要求很高的场合,如Linux这样的操作系统。Linux中引导程序、启动程序及内核程序中都有很多汇编程序或嵌入式汇编程序。汇编语言具有如下优点:能够直接访问与硬件相关的存储器转载 2015-10-18 19:30:53 · 1028 阅读 · 0 评论 -
linux0.11 块设备驱动与高速缓冲区
一、介绍块设备驱动中包含了三部分代码:硬盘驱动,ramdisk驱动,软盘驱动。这三个部分的代码是一致的,采用了相同的处理方式。就是说对底层来说,不同硬件采用不同的方式读取数据,但上层用同样的接口来处理读写操作。大致流程:1:程序要读取数据,首先向缓存区管理程序发出申请,并进入睡眠。2:缓冲区管理程序在缓冲区中查找是否已经读取过该数据块,是则直接返回数据,并唤醒程序。转载 2015-10-11 11:14:39 · 496 阅读 · 0 评论 -
Linux操作系统内核对RTC的编程详解 (1)
MC146818 RTC芯片(或其他兼容芯片,如DS12887)可以在IRQ8上产生周期性的中断,中断的频率在2HZ~8192HZ之间。与MC146818 RTC对应的设备驱动程序实现在include/linux/rtc.h和drivers/char/rtc.c文件中,对应的设备文件是/dev/rtc(major=10,minor=135,只读字符设备)。 Linux内核对RT转载 2015-09-21 01:49:06 · 898 阅读 · 0 评论 -
Linux操作系统内核对RTC的编程详解 (5)
(2)从第二个for循环退出后,RTC的Update Cycle已经结束。此时我们就已经把当前时间逻辑定准在RTC的当前一秒时间间隔内。也就是说,这是我们就可以开始从RTC寄存器中读取当前时间值。 (2)从第二个for循环退出后,RTC的Update Cycle已经结束。此时我们就已经把当前时间逻辑定准在RTC的当前一秒时间间隔内。也就是说,这是我们就可以开始从RT转载 2015-09-21 02:14:20 · 704 阅读 · 0 评论 -
Linux操作系统内核对RTC的编程详解 (4)
如前所述,Linux内核与RTC进行互操作的时机只有两个:(1)内核在启动时从RTC中读取启动时的时间与日期;(2)内核在需要时将时间与日期回写到RTC中。为此,Linux内核在arch/i386/kernel/time.c文件中实现了函数get_cmos_time()来进行对RTC的第一种操作。 7.2.3 内核对RTC的操作如前所述,Linux内核与RTC进转载 2015-09-21 02:04:37 · 683 阅读 · 0 评论 -
Linux操作系统内核对RTC的编程详解 (3)
寄存器C是RTC芯片的中断请求状态寄存器,Linux用宏别名RTC_INTR_FLAGS来表示寄存器C,它与其中的各标志位的定义如下所示寄存器C是RTC芯片的中断请求状态寄存器,Linux用宏别名RTC_INTR_FLAGS来表示寄存器C,它与其中的各标志位的定义如下所示:#define RTC_INTR_FLAGS RTC_REG_C /* ca转载 2015-09-21 02:02:34 · 377 阅读 · 0 评论 -
Linux操作系统内核对RTC的编程详解 (2)
Linux内核仅使用RTC芯片的时间与日期寄存器组和控制寄存器组,地址为0x00~0x09之间的10个时间与日期寄存器的定义如下7.2.2 对RTC寄存器的定义Linux在include/Linux/mc146818RTC.h这个头文件中定义了RTC各寄存器的含义。(1)寄存器内部地址索引的定义Linux内核仅使用RTC芯片的时间与日期寄存器组和控制寄存器组转载 2015-09-21 01:57:52 · 463 阅读 · 0 评论 -
由linux0.11进程调度小窥内存分段机制(转)
内存分段机制的一个主要应用在于实现操作系统的多任务,它为应用程序提供了两个关键抽象:一个独立的逻辑控制流,一个私有的地址空间。本文将针对进程的创建和调度进行分析和实验,从而更深刻的理解分段机制。有关调试环境的建立见前文:从linux0.11引导代码小窥内存分段机制进程调度初始化(sched_init函数) 在引导代码执行结束后,执行序列将跳转到main函数,执行一系列的初始化工转载 2015-10-24 16:00:28 · 435 阅读 · 0 评论 -
linux文件系统之i节点详解
i节点即index node索引节点。接下来的是第五个磁盘块了,480个i节点,每个i节点占用32个字节,总共占用480*32/1024=15个磁盘块,现在再重新理清一下磁盘块的关系了:0块:引导块,每块1024B1块:超级块2块:i节点位图3块:逻辑块位图4...18:i节点区块19块:数据块,刚好和Linux文件系统分析之二中提到的数据块开始于第19块吻合。转载 2015-10-30 22:31:16 · 9777 阅读 · 0 评论 -
关于VFS文件系统中的superblock、inode、d_entry和file数据结构
Linux下的文件系统中宏观上主要分为三层:一是上层的文件系统的系统调用;二是虚拟文件系统VFS(Virtual File System)层,三是挂载到VFS中的各种实际文件系统。 VFS是一种软件机制,只存在于内存中,每次系统初始化期间Linux都会先在内存中构造一棵VFS的目录树(也就是源码中的namespace)。VFS主要的作用是对上层应用屏蔽底层不同的调用方法,提转载 2015-10-30 23:19:53 · 1782 阅读 · 0 评论 -
0.11版linux文件系统(二)
超级块描述了整个文件系统的信息,而文件作为存储的对象,它的信息是有inode节点来描述的。i节点位图描述了inode的使用情况。struct m_inode{ unsigned short i_mode; //文件类型 unsigned short i_uid;//文件宿主 unsigned long i_size;//文件大小转载 2015-10-30 22:12:26 · 509 阅读 · 0 评论 -
0.11版linux文件系统(一)
文件系统和内存管理,以及进程管理是操作系统的核心部分。数据通常以文件的形式存储在设 备上,因此文件系统的基本功能就是以某种格式存取/控制文件。0.11版的内核中采用了minix1.0版的文件系统。在最新的2.6版内核中,借助于 VFS,系统支持50多种文件系统。首先介绍一下minix文件系统minix文件系统和标准unix文件系统基本相同。它由6个部分组 成,分别是:引导块,超级块,i节点转载 2015-10-30 22:14:38 · 1074 阅读 · 0 评论 -
0.11版linux文件系统(三)
目录项和超级块,节点的概念不同,它在设备上没有对应的磁盘数据结构。相反,它是目录文 件的一部分。linux中目录也是一种文件,类型是'd'。但是目录中的内容和普通文件不同,它是由目录项组成的。注意目录项不是目录。我们经常用路径名 执行相关操作,目录项就是为了查找方便的。struct dirt_entry{ unsigned short inode; ch转载 2015-10-30 22:05:53 · 852 阅读 · 0 评论 -
Linux文件系统分析之二(超级块,i节点位图和逻辑块位图)
第二个扇区和第一个扇区一样属于引导块,这里就不列举出其内容了,这里的一块是两个扇区即1024B。接下来的一块就是大名鼎鼎的超级块了。其内容如下:00000400h: E0 01 A0 05 01 00 01 00 13 00 00 00 00 1C 08 10 ; ??............00000410h: 7F 13 00 00 00 00 00 00 00 00 00 00 00转载 2015-11-01 15:15:01 · 5396 阅读 · 0 评论 -
Linux文件系统分析之三(i节点区)
i节点即index node索引节点。接下来的是第五个磁盘块了,480个i节点,每个i节点占用32个字节,总共占用480*32/1024=15个磁盘块,现在再重新理清一下磁盘块的关系了:0块:引导块,每块1024B1块:超级块2块:i节点位图3块:逻辑块位图4...18:i节点区块19块:数据块,刚好和Linux文件系统分析之二中提到的数据块开始于第19块吻合。转载 2015-11-01 15:15:49 · 922 阅读 · 0 评论 -
Linux文件系统分析之五(常规文件的表示)
通过rootimage引导,往/usr/root目录下面写入hello.c文件,在分析之四中已经到达了/usr/root目录,在进一步看看这个目录里面有什么内容: 这个目录位于第3DH=61个i节点,再磁盘映象中找到如下:00001780h: FF 41 00 00 50 00 00 00 48 A2 47 40 00 02 29 05 ; ?A..P...H@..).0000转载 2015-11-01 15:16:54 · 1641 阅读 · 0 评论 -
Linux文件系统分析之四(目录项)
下面顺着分析之三的思路,追溯到19号磁盘块,首先算出其偏移地址19*1024=19456即4C00处,这里的磁盘映象如下:00004c00h: 01 00 2E 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................00004c10h: 01 00 2E 2E 00 00 00 00 00 00 00 00 00 00 00 00转载 2015-11-01 15:16:18 · 832 阅读 · 0 评论 -
linux内核自锁旋spinlock常用宏解释
自旋锁与互斥锁有点类似,只是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁,"自旋"一词就是因此而得名。 由于自旋锁使用者一般保持锁时间非常短,因此选择自旋而不是睡眠是非常必要的,自旋锁的效率远高于互斥锁。 信号量和读写信号量适合于保持时间较长的情况,它们会导致调用者睡眠,因此只能在进程上下文使用(_tryl转载 2015-09-18 16:16:39 · 333 阅读 · 0 评论 -
task_struct结构描述
4.3 task_struct结构描述 1. 进程状态(State)进程执行时,它会根据具体情况改变状态。进程状态是调度和对换的依据。Linux中的进程主要有如下状态,如表4.1所示。表4.1 Linux进程的状态 内核表示含义TASK_RUNNING可运行TASK_INTERRU转载 2015-09-18 15:59:55 · 318 阅读 · 0 评论 -
32位保护模式内存寻址原理
阅读: 2,136内存寻址原理在做网络安全事件分析的时候,都会遇到内存寻址的知识,例如上次跟大家分享的《 空指针漏洞防护技术》,就涉及到非法访问内存地址的问题。如果这个坎儿迈不过去,你就会迷失在代码中,更无从分析了。今天绿盟科技的安全技术专家就讲讲这个内存寻址的原理,文章分为上下两篇《内存寻址原理》及《内存寻址方式》。随着信息化发展和数据处理能力需求的提高,对计算机转载 2015-10-11 22:23:51 · 5083 阅读 · 0 评论 -
Intel X86 CPU系列的寄存器
一、32位CPU系统级寄存器和数据结构二、寄存器分类介绍通用寄存器:8个,分别为EAX,EBX,ECX,EDX,ESP,EBP,ESI,EDI标志寄存器:1个,EFLAGS控制寄存器:5个,分别为CR0-CR4调试寄存器:8个,分别为DR0-DR7系统地址寄存器:4个,GDTR、IDTR、LDTR和TR16位段寄存器:6个,分别为CS,DS,ES,FS,GS,SS转载 2015-10-06 18:46:54 · 672 阅读 · 1 评论 -
32位保护模式下的寻址方式
16位实模式下,一个物理地址由段地址和偏移地址两部分组成,段地址在16位段寄存器中,然后在指令中用16位偏移地址寻址。物理地址=段地址*0x10+偏移地址32位保护模式下,问题变复杂了。首先要明白,保护模式保护什么?保护的是:分清楚各个程序使用的存储区域,不允许随便跨界访问。然后,怎么保护?方式是:为内存里的每段地址空间定义一些安全上的属性,比如可以被多少优先级的代码写入,是不是允许执行等转载 2015-10-04 12:09:27 · 852 阅读 · 0 评论 -
80X86的物理地址形成(实模式+保护模式)——段式寻址
1.实模式80X86系列CPU中,最早的是8086,它有20根地址线,可以寻址1MB(2^20)内存空间。很自然地,如果CPU要跟主存交换信息,它也必须有20位的物理地址,但是,8086CPU内部是16位的结构,它里面跟地址有关的寄存器都是16位的(8086中跟地址有关的寄存器有五个:SI,DI,BP,SP,IP,前四个是变址寄存器,最后一个是指令指示器,它保存的是CPU将要执行的下一转载 2015-10-04 12:02:27 · 1636 阅读 · 0 评论 -
深入详解保护模式下的内存分页机制
386及更高型号处理器使用内存分页机制,这使得同一个线性地址可以被映射为多个物理地址,这种映射是通过分页单元这一特殊的硬件电路实现的。通常程序中所使用的线性地址是由链接器帮我们产生的,而操作系统通过维护每个进程私有的页目录和页表实现线性地址与物理地址之间的转换,转换过程对于进程来说是透明的。此外正如保护模式下的段寄存器提供对整个段的访问控制一样,分页单元在更细粒度的页级层面上提供对整个页的保护机制转载 2015-10-04 11:52:32 · 1246 阅读 · 0 评论 -
BIOS和DOS中断大全
中断INT 21H :1、字符功能调用类(Character-Oriented Function)01H、07H和08H —从标准输入设备输入字符02H —字符输出03H —辅助设备的输入04H —辅助设备的输出05H —打印输出06H —控制台输入/输出09H —显示字符串0AH — 键盘缓冲输入0BH —检测输入状态0CH —清输入缓冲区的输入功能转载 2015-10-01 06:46:09 · 381 阅读 · 0 评论 -
BIOS的入口地址0xFFFF0
一直都说开机加电之后,将CS设置为0xFFFF,IP设置为0x0000,这样组成的地址就是0xFFFF0,而这个就是BIOS的入口地址,之后CPU读取这个地址的代码,然后就巴拉巴拉的开始执行下去了。现在想知道这个地址0xFFFF0是在主板上呢,还是在内存上。想着如果是统一编址的话,就可能是去读取主板上的ROM,但是看书上的图,有像是在RAM中,如果是在 内存 中,那是什么时候,由哪段程序将转载 2015-10-03 07:01:22 · 537 阅读 · 0 评论 -
int 13h 参数大全
直接磁盘服务(Direct Disk Service——INT 13H) 00H —磁盘系统复位 01H —读取磁盘系统状态 02H —读扇区 03H —写扇区 04H —检验扇区 05H —格式化磁道 06H —格式化坏磁道 07H —格式化驱动器 08H —读取驱动器参数 09H —初始化硬盘参数 0AH —读长扇区 0BH —写长扇区 0转载 2015-09-30 01:14:20 · 475 阅读 · 0 评论 -
int 13h 返回信息
BIOS磁盘操作 INT 13H 处理的记录都是一个扇区大小,以实际的磁道号和扇区号寻址.AH执行操作入口参数返回参数00H复位磁盘系统DL=驱动器号失败: AH=错误码01H读磁盘状态转载 2015-09-29 11:24:25 · 944 阅读 · 0 评论 -
int 10 中断
INT 10H 是由 BIOS 對螢幕及顯示器所提供的服務程式,而後倚天公司針對倚天中文提供了許多服務程式,這些服務程式也加掛在 INT 10H 內。使用 INT 10H 中斷服務程式時,先指定 AH 暫存器為下表編號其中之一,該編號表示欲呼叫的功用,而其他暫存器的詳細說明,參考表後文字,當一切設定好之後再呼叫 INT 10H。底下是它們的說明:編號功用編號功用转载 2015-09-24 18:47:17 · 1000 阅读 · 0 评论 -
Linux实现时钟中断的全过程
1.可编程定时/计数器的初始化IBM PC中使用的是8253或8254芯片。有关该芯片的详细知识我们不再详述,只大体介绍以下它的组成和作用,如下表5.1所示: 表5.1 8253/8254的组成及作用名称端口地址工作方式产生的输出脉冲的用途计数器00x40方式3转载 2015-09-21 09:16:48 · 2335 阅读 · 0 评论 -
内核随记(一)——理解中断(3)
4、下半部在中断处理过程中,不能睡眠。另外,它运行的时候,会把当前中断线在所有处理器上都屏蔽(在ack中完成屏蔽);更糟糕的情况是,如果一个处理程序是SA_INTERRUPT类型,它执行的时候会禁上所有本地中断(通过cli指令完成),所以,中断处理应该尽可能快的完成。所以Linux把中断处理分为上半部和下半部。上半部由中断处理程序完成,它通常完成一些和硬件相关的操作,比如对中断的到达的确认转载 2015-09-21 08:05:51 · 286 阅读 · 0 评论 -
内核随记(一)——理解中断(2)
3、内核的中断处理3.1、中断处理入口由上节可知,中断向量的对应的处理程序位于interrupt数组中,下面来看看interrupt:341 .data #数据段342 ENTRY(interrupt)343 .text344345 vector=0346 ENTRY(irq_entries_start) 347 .rept NR_IRQS #348-3转载 2015-09-21 05:15:50 · 317 阅读 · 0 评论 -
内核随记(一)——理解中断(1)
一直认为,理解中断是理解内核的开始。中断已经远远超过仅仅为外围设备服务的范畴,它是现代体系结构的重要组成部分。1、基本输入输出方式现代体系结构的基本输入输出方式有三种:(1)程序查询:CPU周期性询问外部设备是否准备就绪。该方式的明显的缺点就是浪费CPU资源,效率低下。但是,不要轻易的就认为该方式是一种不好的方式(漂亮的女人不一定好,不漂亮的女人通常很可爱),通常效率低下是由于转载 2015-09-21 04:45:16 · 400 阅读 · 0 评论 -
linux0.11下的中断机制分析
异常就是控制流中的突变,用来响应处理器状态中的某些变化。当处理器检测到有事件发生时,它就会通过一张叫做异常表的跳转表,进行一个间接过程调用,到一个专门设计用来处理这类事件的操作系统子程序,这张表即中断描述符表IDT。本文将针对Linux0.11代码进行分析和调试,来了解中断机制,主要分析以下三个问题:1. 中断描述符表的建立。2. 一般中断的处理过程,以0x3号中断为例。3. 系转载 2015-09-21 04:08:29 · 770 阅读 · 0 评论 -
Linux内核调试方法总结
内核开发比用户空间开发更难的一个因素就是内核调试艰难。内核错误往往会导致系统宕机,很难保留出错时的现场。调试内核的关键在于你的对内核的深刻理解。 一 调试前的准备在调试一个bug之前,我们所要做的准备工作有: 有一个被确认的bug。包含这个bug的内核版本号,需要分析出这个bug在哪一个版本被引入,这个对于解决问题有极大的帮助。转载 2015-09-17 19:33:18 · 522 阅读 · 0 评论 -
解析Linux内核获取当前进程指针的方法
一、内存数据表示:推荐文章:《linux 进程管理》我们在教材或阅读中,经常需要直观的用图示来展示数据在内存中的分布,那么数据是如何在内存 中组织的呢?不同的机器有不同的表示法,我们以最常见的Intel X86系列计算机为例来说明这个问题。 如上图示内存示意图:内存低址在上。内存高址在下,内存单位为16bit。对于基于intel转载 2015-09-17 19:12:35 · 311 阅读 · 0 评论 -
Linux文件系统分析之一(工具与方法)
这里的分析有别于一般书上讲的Linux文件系统分析,主要区别是:这里的分析与其说是文件系统分析倒不如说是Linux磁盘映象的分析,首先从获取磁盘映象开始,然后分析磁盘映象的结构,内核文件系统部分的代码无非就是对磁盘映象的管理罢了。 依据读源代码的体会,Linux文件系统实现可以看作三个部分:用户眼中的文件系统,内存中的文件系统,磁盘上的文件系统。用户眼中的文件系统是指op转载 2015-11-01 15:14:16 · 1012 阅读 · 1 评论