![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
IA32
sunxiaohusunke
这个作者很懒,什么都没留下…
展开
-
IA32体系结构1(x86寄存器)
Intel Architecture 32位处理器,主要以80386为参考。包括以下几类寄存器:1.通用寄存器2.段寄存器3.状态和控制寄存器4.指令指针寄存器EIP5.内存管理寄存器6.控制寄存器通用寄存器通用寄存器有8个,分别是EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP。intel通用寄存器很少,比起ARM动不动30多个,要少很多,inte...原创 2019-03-25 14:01:25 · 768 阅读 · 0 评论 -
[转]计算机的引导过程
原文标题:How Computers Boot Up原文地址:http://duartes.org/gustavo/blog/[注:本人水平有限,只好挑一些国外高手的精彩文章翻译一下。一来自己复习,二来与大家分享。]前一篇文章介绍了Intel计算机的主板与内存映射,从而为本文设定了一个系统引导阶段的场景。引导(Booting)是一个复杂的,充满技巧的,涉及多个阶段,又十分有趣的过程。...转载 2019-03-29 10:58:28 · 999 阅读 · 0 评论 -
[转]内核引导过程
原文标题:The Kernel Boot Process原文地址:http://duartes.org/gustavo/blog/[注:本人水平有限,只好挑一些国外高手的精彩文章翻译一下。一来自己复习,二来与大家分享。]上一篇文章解释了计算机的引导过程,正好讲到引导装载程序把系统内核镜像塞进内存,准备跳转到内核入口点去执行的时刻。作为引导启动系列文章的最后一篇,就让我们深入内核,去看...转载 2019-03-29 11:00:09 · 162 阅读 · 0 评论 -
[转]内存地址转换与分段
原文标题:Memory Translation and Segmentation原文地址:http://duartes.org/gustavo/blog/[注:本人水平有限,只好挑一些国外高手的精彩文章翻译一下。一来自己复习,二来与大家分享。]本文是Intel兼容计算机(x86)的内存与保护系列文章的第一篇,延续了启动引导系列文章的主题,进一步分析操作系统内核的工作流程。与以前一样,我...转载 2019-03-29 11:01:37 · 261 阅读 · 0 评论 -
[转]CPU的运行环, 特权级与保护
原文标题:CPU Rings, Privilege, and Protection原文地址:http://duartes.org/gustavo/blog/[注:本人水平有限,只好挑一些国外高手的精彩文章翻译一下。一来自己复习,二来与大家分享。]可能你凭借直觉就知道应用程序的功能受到了Intel x86计算机的某种限制,有些特定的任务只有操作系统的代码才可以完成,但是你知道这到底是怎么...转载 2019-03-29 11:09:42 · 173 阅读 · 0 评论 -
[转]Cache: 一个隐藏并保存数据的场所
原文标题:Cache: a place for concealment and safekeeping原文地址:http://duartes.org/gustavo/blog/[注:本人水平有限,只好挑一些国外高手的精彩文章翻译一下。一来自己复习,二来与大家分享。]本文简要的展示了现代Intel处理器的CPU cache是如何组织的。有关cache的讨论往往缺乏具体的实例,使得一些简单...转载 2019-03-29 11:12:00 · 295 阅读 · 0 评论 -
[转]剖析程序的内存布局
原文标题:Anatomy of a Program in Memory原文地址:http://duartes.org/gustavo/blog/[注:本人水平有限,只好挑一些国外高手的精彩文章翻译一下。一来自己复习,二来与大家分享。]内存管理模块是操作系统的心脏;它对应用程序和系统管理非常重要。今后的几篇文章中,我将着眼于实际的内存问题,但也不避讳其中的技术内幕。由于不少概念是通用的,...转载 2019-03-29 11:15:31 · 124 阅读 · 0 评论 -
[转]内核是如何管理内存的
原文标题:How The Kernel Manages Your Memory原文地址:http://duartes.org/gustavo/blog/[注:本人水平有限,只好挑一些国外高手的精彩文章翻译一下。一来自己复习,二来与大家分享。]在仔细审视了进程的虚拟地址布局之后,让我们把目光转向内核以及其管理用户内存的机制。再次从gonzo图示开始:Linux进程在内核中是由ta...转载 2019-03-29 11:19:32 · 138 阅读 · 0 评论 -
[转]页面缓存-内存与文件的那些事
原文标题:Page Cache, the Affair Between Memory and Files原文地址:http://duartes.org/gustavo/blog/[注:本人水平有限,只好挑一些国外高手的精彩文章翻译一下。一来自己复习,二来与大家分享。]上次我们考察了内核如何为一个用户进程管理虚拟内存,但是没有涉及文件及I/O。这次我们的讨论将涵盖非常重要且常被误解的文件...转载 2019-03-29 11:21:42 · 149 阅读 · 0 评论 -
[转]CPU的等待有多久?
原文标题:What Your Computer Does While You Wait原文地址:http://duartes.org/gustavo/blog/[注:本人水平有限,只好挑一些国外高手的精彩文章翻译一下。一来自己复习,二来与大家分享。]本文以一个现代的、实际的个人电脑为对象,分析其中CPU(Intel Core 2 Duo 3.0GHz)以及各类子系统的运行速度——延迟和...转载 2019-03-29 10:53:14 · 565 阅读 · 0 评论 -
[转]主板芯片组与内存映射
原文标题:Motherboard Chipsets and the Memory Map原文地址:http://duartes.org/gustavo/blog/[注:本人水平有限,只好挑一些国外高手的精彩文章翻译一下。一来自己复习,二来与大家分享。]我打算写一组讲述计算机内幕的文章,旨在揭示现代操作系统内核的工作原理。我希望这些文章能对电脑爱好者和程序员有所帮助,特别是对这类话题感...转载 2019-03-29 10:49:17 · 301 阅读 · 0 评论 -
IA32体系结构6(x86加电启动过程概述)
第一条指令物理地址加电启动过程非常精妙,道理很简单,加电时刻,所有的硬件部件基本都是没法工作的状态。至少内存里什么有用的东西也没有,CPU的寄存器还是初始状态,各种地址转换表也没有建立好。首先我们来看下,CPU从上电到正常工作,在地址线上发出的第一个有效物理地址是什么。这个在《Intel Architecture Software Developer Manual Volume 3》8.1...原创 2019-03-29 10:46:40 · 578 阅读 · 0 评论 -
IA32体系结构2(x86寻址方式)
数据寻址方式8086~80286微处理器的数据寻址方式包括:1.寄存器寻址2.立即寻址3.直接寻址4.寄存器间接寻址5.基址加变址寻址6.寄存器相对寻址7.相对基址加变址寻址80386以上处理器还包括:8.比例变址方式的存储器数据寻址一些说明这么多的寻址方式,有些比较直观,有些就很头大,什么叫基址加变址寻址?这要从x86的寄存器说起,话说x86有8个...原创 2019-03-26 16:28:20 · 1019 阅读 · 0 评论 -
IA32体系结构3(x86机器码概述)
归根结底,处理器只认识机器语言,处理器会按照机器码的指示进行动作。x86体系结构使用指令长度可变的机器语言,一条机器码指令可以从1字节到13字节不等。这个跟ARM还是有很大区别,ARM32位处理器的话,是定长指令,是32位长度。8086~80286使用16位指令模式,80386以上处理器也可以工作在16位指令模式,两者是兼容的。16位模式和32位模式,其指令机器码格式有一些差别,具体格式如...原创 2019-03-27 11:40:37 · 2147 阅读 · 0 评论 -
IA32体系结构7(x86中断和异常调用过程)
中断和异常概况处理器提供了两种中断程序执行的机制:中断和异常。尽管处理过程类似,但两种机制有很大区别。其中,中断(interrupt)是一种异步事件,由I/O设备触发;异常(exception)是一种同步事件,当处理器运行指令时检测到一些预定义的条件就会触发,异常分为三类:faults、traps和aborts。中断和异常的处理过程入口点在IDT表里面,IDT里面有两种门描述符:中断门...原创 2019-03-20 10:09:12 · 590 阅读 · 0 评论 -
IA32体系结构8(x86过程调用)
直观感受及疑问正常情况下,CPU执行指令都是一条条顺序往下执行。所谓过程调用,就是CPU停止执行下一条指令,转而去执行其它地方的指令。当这些指令执行完毕之后,CPU回到之前暂停的下一条指令,重新开始执行。有点类似C语言的“函数调用”。那么,我们有几个问题需要弄清楚:1.我们的指令中,如何跳转到过程调用指令,又如何回来?2.跳过去又回来,CPU是如何记住之前的执行位置的?3.如果过程...原创 2019-03-19 16:56:36 · 495 阅读 · 0 评论 -
IA32体系结构4(x86常见指令概述)
IA32(x86)体系结构指令种类比较多,但是常见的一般也还行,一下总结linux0.11内核中使用到的所有指令,概述这些指令的基本用法,因指令的使用跟寻址方式都有关系,篇幅所限,不详细展开所有细节,看内核代码,了解基本情况已经足够。1.MOV(mov)数据转移指令,从源操作数转移数据到目标操作数。2.PUSH(push)9086~80286中的push总是把两个字节的数据传送到堆...原创 2019-03-28 09:09:22 · 907 阅读 · 0 评论 -
linux内核研究笔记1(linux0.11 boot部分总结)
最近花了点时间仔细阅读了linux0.11内核代码的boot部分。要看懂该部分的代码,需要事先准备如下知识点:1.80x86体系结构基础包括寄存器、基本指令等2.80x86实模式3.80x86保护模式及编程主要理解分段机制,分页机制。需要理解几个表和结构:GDT、IDT、LDT、TSS、页目录表、页表及各自表项结构。4.早期IBM PC机的启动过程5.BIOS基本中断服...原创 2019-04-01 15:27:27 · 555 阅读 · 0 评论 -
IA32体系结构5(x86程序控制指令)
转移指令转移指令(JMP)允许程序员跳过一段程序,跳转到存储器的任何位置执行下一条指令。条件转移则允许程序员根据对数值的测试做出决定。这些数值测试的结果保存在标志位中,再由条件转移指令检测它们。1.无条件转移指令可以分为短转移、近转移、远转移。短转移-2字节指令,允许在+127和-128字节范围内转移近转移-3字节指令,允许在+32kb和-32kb范围内转移远转移-5字节指...原创 2019-03-28 10:53:44 · 428 阅读 · 0 评论 -
linux内核研究笔记2(关于asm.s中call函数的说明)
asm.s程序第39行中(以下片段第21行处),有个call函数调用代码,如下:_divide_error: pushl $_do_divide_errorno_error_code: xchgl %eax,(%esp) pushl %ebx pushl %ecx pushl %edx pushl %edi pushl %esi pushl %ebp push %ds ...原创 2019-04-02 16:03:27 · 389 阅读 · 0 评论 -
linux内核研究笔记5(系统调用中断堆栈视图)
linux 0.11 system_call.s中系统调用中断入口函数,代码如下:_system_call: cmpl $nr_system_calls-1,%eax ja bad_sys_call push %ds push %es push %fs pushl %edx pushl %ecx # push %ebx,%ecx,%edx as parameters pus...原创 2019-04-03 10:41:47 · 346 阅读 · 0 评论