外部中断(或硬件中断) 内部中断(或叫异常) 本章主要讨论在 Intel i386 保护模式下中断机制在 Linux 中的实现。...中断向量: Intel x86 系列微机共支持 256 种向量中断。...外设可屏蔽中断: Intel x86 通过两片中断控制器 8259A 来响应 15 个外中断源。 中断控制器 8259A 执行如下操作: 监视中断线,检查产生的中断请求(IRQ)信号。...Intel x86 处理器发布了大约 20 种异常(具体数字与处理器模式有关)。每个异常都由专门的异常处理程序来处理。...分两步进行有效性检查: “段”级检查 “门”级检查 检查是否发生了特权级的变化 Linux 对中断的处理: Linux 把一个中断要执行的操作分为下面的 3 类: 紧急的(Critical)
IO空间:X86特有的一个空间,与内存空间彼此独立的地址空间,32位X86有64K的IO空间。 IO端口:当寄存器或内存位于IO空间时,称为IO端口。...outb( )、outw( )、outl( ) 分别向一个I/O端口写入1、2或4个连续字节。...outb_p( )、outw_p( )、outl_p( ) 分别向一个I/O端口写入1、2或4个连续字节,然后执行一条“哑元”指令使CPU暂停。...“ 六、Linux下访问IO内存请输入标题 IO内存的访问方法是:首先调用request_mem_region()申请资源,接着将寄存器地址通过ioremap()映射到内核空间的虚拟地址,之后就可以Linux...最后来看一下ioread8的源码,其实现也就是对虚拟地址进行了判断,以区分IO端口和IO内存,然后分别使用inb/outb和readb/writeb来读写。 ?
五、x86指令集和ARM指令集 1....X86指令集 X86指令集是Intel为其第一块16位CPU(i8086)专门开发的,后来的电脑中为提高浮点数据处理能力而增加的X87芯片系列数学协处理器以及使用X87指令,以后就将X86指令集和X87...指令集统称为X86指令集。...由于Intel X86系列及其兼容CPU都使用X86指令集,所以就形成了今天庞大的X86系列及兼容CPU阵容。...除了个人PC市场还在用X86指令集外,服务器以及更大的系统都早已不用CISC了。x86仍然存在的理由就是为了兼容大量的x86平台上的软件。同时,它的体系结构组成的实现不太困难。
https://blog.csdn.net/u014688145/article/details/50608829 备注:本文通过三个问题,引出Linux 内核0.11的系统调用。...Linux内核通过建立段级保护机制来完成上述区分核心与用户态区域的功能。好,请看下图: ?...对于Intel x86系统,那就是通过中断调用号 int 0x80来完成。...(0x36,0x43); /* binary, mode 3, LSB/MSB, ch 0 */ outb_p(LATCH & 0xff , 0x40); /* LSB */...outb(LATCH >> 8 , 0x40); /* MSB */ set_intr_gate(0x20,&timer_interrupt); outb(inb_p
对于x86架构来说,通过IN/OUT指令访问。...IO空间:X86特有的一个空间,与内存空间彼此独立的地址空间,32位X86有64K的IO空间。 IO端口:当寄存器或内存位于IO空间时,称为IO端口。...outb( )、outw( )、outl( ) 分别向一个I/O端口写入1、2或4个连续字节。...outb_p( )、outw_p( )、outl_p( ) 分别向一个I/O端口写入1、2或4个连续字节,然后执行一条“哑元”指令使CPU暂停。...最后来看一下ioread8的源码,其实现也就是对虚拟地址进行了判断,以区分IO端口和IO内存,然后分别使用inb/outb和readb/writeb来读写。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuzhina/article/detai...
看一个coredump: Program terminated with signal 11, Segmentation fault. #0 0x0090bb...
lw_logs-outb_message = outb_message. lw_logs-ex_message = ex_message....outb_object-export_para1 = 'result'. loop at table_para1....append table_para1 to outb_object-table_para1. endloop....outb_object-change_para1 = change_para1....= outb_message.
clone https://pdos.csail.mit.edu/6.828/2018/jos.git lab 测试的话可以使用: make grade Part 1: PC Bootstrap 需要了解x86...引导加载程序必须执行的两个主要功能: 将处理器从实模式切换到 32位保护模式; 通过x86的特殊I / O指令直接访问IDE磁盘设备寄存器,从硬盘读取内核; 引导加载程序的源代码: boot/boot.S...等待其不忙状态 testb $0x2,%al jnz seta20.1 movb $0xd1,%al # 0xd1 -> 端口 0x64 outb...(0x1F2, 1); // count = 1 outb(0x1F3, offset); outb(0x1F4, offset >> 8); outb(0x1F5, offset >> 16)...; outb(0x1F6, (offset >> 24) | 0xE0); outb(0x1F7, 0x20); // cmd 0x20 - 读取扇区 // 等待磁盘准备好 waitdisk(
;} void hd_out(drive, nsect, sec, head, cyl, cmd...){ port = HD_DATA; //数据寄存器端口(0x1f0) //需要连续读取几个扇区 outb_p...(nsect,++port); //哪个扇区 outb_p(sect,++port); //哪个柱面 outb_p(cyl,++port); outb_port(cyl>>8,++port); //哪个磁头...outb_p(0xA0|(drive<<4)|head, ++port); outb_p(cmd, ++port); } 实际代码书写就是找到磁盘控制器对应的端口位置,然后将要操作的柱面,磁头,扇区位置...void make_request(){ struct requset *req; req=request+NR_REQUEST; //根据盘块号计算出扇区号---从b_blocknr<<1可以知道Linux...0.11中盘块号和扇区的映射关系 //0---->0 //1----->2 //2----->4 //可以看到在linux 0.11中一个盘块对应两个连续的扇区 req->sector=bh->b_blocknr
)中的RC两个位决定 RC 舍入控制 00 四舍五入 01 向负无限大舍入 10 向正无限大舍入 11 向零舍去 ---- Reference: x86
例如51为统一编址,I/O和存储器总计64K地址空间;X86为独立编址,分为I/O地址空间和存储器地址空间。 IO空间,内存空间 X86:支持内存空间,IO空间,独立编址。...IO端口和IO内存:对于X86系统区别很大,例如,网卡接口,可以连接在IO的这一组地址总线上,也可以连接在内存的这一组地址总线上,就可分别出现IO端口和IO内存的区别。...访问:static inline int inb(unsigned long i) //读字节端口(8位) static inline void outb(char c, unsigned long i...映射:由于linux系统中不能直接使用物理地址,必须使用虚拟虚拟地址,所以对IO内存的操作,必须有一个映射的过程。
[xuzhina@localhost s1_ex]$ gdb xuzhina_dump_c07_s1_ex core.27776 GNU gdb (GDB) Red Hat Enterprise Linux...This GDB was configured as "i686-redhat-linux-gnu"....Loaded symbols for /lib/libc.so.6 Reading symbols from /lib/ld-linux.so.2......Loaded symbols for /lib/ld-linux.so.2 Core was generated by `./xuzhina_dump_c07_s1_ex'.
领取专属 10元无门槛券
手把手带您无忧上云