- 博客(7)
- 资源 (21)
- 收藏
- 关注
原创 X86保护模式(二)· 存储器的保护
修改段寄存器时的保护在保护模式下,修改段寄存器需要带入段选择子,此时会校验带入值的合法性,然后从全局描述符表GDT中找到相应的描述符并加载到描述符高速缓存器中,此时会校验描述符的完整性和正确性。在全局描述符表GDTR中,有GDT线性基地址和界限值两部分,选择子所选择的描述符必须在边界值以内,也就是索引号 * 8 + 7 <= 边界,如果选择子对应的描述符超出了界限值,处理器会响应一个异常中断13,并且不会改变段寄存器的内容。如果描述符S=1,便会校验type域,type域必须是有效的,比如000
2020-10-11 18:09:10
365
原创 指令的格式及操作尺寸
32位处理器的指令操作尺寸在32位处理器中,源操作数既可以是32位的,也可以是16位的,还可以是8位的,目的操作数同理,并且在实模式下,也可以用32位寄存器来访问内存,那么是不是说实模式下也可以访问全部4G字节内存呢?通常来讲,是不行的,因为32位处理器的描述符高速缓存中,除了有线性基地址,还有段界限,在实模式下计算机会将其预置为0xFFFF,也就是64KB,如果超过这个界限也会被处理器阻止,这样以保证程序在实模式下和8086的表现相同。比如下面这样:mov cx, 0x2000mov ds, cx
2020-09-15 21:50:46
2005
原创 X86保护模式(一)· 何为保护模式
在实模式下,用户程序对内存的访问十分自由,它可以访问1MB内的任何地址,任意修改其它程序的内存空间,也可以访问任何端口,这也意味着可以访问任何设备,诚然,这对于现代计算机来说,是一件非常危险的事情。在当下多用户多任务的背景下,内存中通常会有多个任务在同时运行,为了使他们彼此隔离,防止因某个用户程序的错误而影响其它程序甚至操作系统,引入保护模式是非常有必要的。...
2020-09-05 21:44:55
1169
原创 读写锁ReentrantReadWriteLock源码分析
在Java并发包中,有独占模式的锁,同时只允许一个线程执行;还有共享模式的锁,同时允许有多个线程获取锁。典型的实现就是读写锁——ReentrantReadWriteLock,下面我们来分析一下它的实现原理。读写状态的设计如果阅读过我的上一篇文章《ReentrantLock源码分析》可以知道:AQS中有一个state字段表示锁的获取状态,或者说是重入了几次,那么对于读写锁,它既要表示出读锁的重入...
2019-11-19 21:56:48
271
原创 ReentrantLock源码分析
ReentrantLock是JUC中最常用的一种重入锁,其内部实现原理是通过一种叫AQS的队列来控制并发。我们先来讨论一下锁的实现原理,
2019-10-25 21:48:50
205
原创 通过结构体成员的地址获取结构体变量的地址
C 语言的结构体可以将不同类型的对象聚合到一个对象中,在内存中,编译器按照成员列表顺序分别为每个结构体变量成员分配内存,但由于 C 的内存对齐机制以及不同机器间的差异,各个成员之间可能会有间隙,所以不能简单的通过成员类型所占的字长来推断其它成员或结构体对象的地址。如果要计算结构体中某成员相对于该结构体首地址的偏移量,一般第一个反应就是该成员的地址与结构体对象的首地址之间的字节数,就比如我定义了
2016-05-25 21:18:32
16717
2
原创 详解 GNU C 标准中的 typeof 关键字
如果你是 C++ 程序员,应该接触过 C++11 里的 decltype 操作符,它的作用是自动推导表达式的数据类型,以解决泛型编程中有些类型由模板参数决定而难以(甚至不可能)表示的问题。其实这个特性在 C 语言中也早有类似的实现,GNU C 标准中的一个扩展特性 typeof (PS: 不是 typedef)作用与 decltype 类似,我们来看看这个关键字该怎么用。先来看一个最简
2016-05-25 16:28:09
22436
5
QRCode.jar
2017-09-21
用Python进行自然语言处理(中文)
2016-06-15
python核心笔记
2016-06-12
The Django Book 2.0中文译本
2016-06-12
数据结构与算法分析:C语言描述_原书第2版_高清版
2016-03-19
ncurses文档
2016-02-16
深入理解计算机系统
2015-12-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人