- 博客(10)
- 资源 (8)
- 收藏
- 关注
原创 sizeof(void*)的大小到底由何决定?(个人理解)
由编译器产生的目标平台的指令集决定的。譬如说x86就是4,x64就是8.sizeof(void*)的含义就是获取一个指针的大小。指针的本质就是内存地址,因此指针的大小和内存空间有关。32位的机器内存空间是2G(windows系统),因此指针的大小必须是,凑个整数那就是32bit。因此本质上说,sizeof(void*)和编译器目标平台的内存空间有关。
2016-03-24 20:37:24 18087 1
原创 Inter asm 与 AT&T asm 比较
一、X86 寻址方式x86的通用寄存器有8个。这些寄存器在大多数指令中是可以任意选用的,比如movl 指令可以把一个立即数传送到eax 中,也可传送到ebx 中。但也有一些指令规定只能用其中某个寄存器做某种用途,例如除法指令idivl 要求被除数在eax 寄存器中,edx 寄存器必须是0,而除数可以在任意寄存器中,计算结果的商数保存在eax 寄存器中(覆盖原来的被除数),余数保存在
2016-03-24 20:36:27 1565
原创 AT&T汇编enter、leave、call、ret指令
enter指令在AT&T汇编中,enter等效于以下汇编指令:pushl %ebp # 将%ebp压栈movl %esp %ebp # 将%esp保存到%ebp, 这两步是函数的标准开头leave指令在AT&T汇编中,leave等效于以下汇编指令:movl %ebp, %esppopl %ebpcall指令
2016-03-24 20:35:50 3214 2
原创 地址空间的抽象理解(个人理解)
用户程序在运行时不希望介入到这些复杂的存储器管理过程中,作为普通的程序,它需要的是一个简单的执行环境,有一个单一的地址空间、有自己的CPU,好像整个程序占有整个计算机而不用关心其它的程序(当然程序间通信的部分除外,因为这是程序主动要求跟其它程序通信和联系)。 所谓的地址空间是个比较抽象的概念,你可以把它想象成一个很大的数组,每个数组的元素是一个字节,而这个数组大小由地址空间的
2016-03-24 20:34:57 1384
原创 关于隔离
让我们回到程序的运行本质上来。用户程序在运行时不希望介入到这些复杂的存储器管理过程中,作为普通的程序,它需要的是一个简单的执行环境,有一个单一的地址空间、有自己的CPU,好像整个程序占有整个计算机而不用关心其他的程序(当然程序间通信的部分除外,因为这是程序主动要求跟其它程序通信和联系)。 所谓的地址空间是个比较抽象的概念,你可以把它想象成一个很大的数组,每个数组的元素是一个字节,而这
2016-03-03 18:07:11 531
原创 内存不够怎么办?
进程的总体目标是希望每个进程从逻辑上看都可以独占计算机的资源。OS的多任务功能使得CPU能够在多个进程之间很好地共享,从进程的角度看好像是它独占了CPU,而不用考虑其他进程分享CPU的事情。OS的I/O抽象模型也很好地实现了I/O设备的共享和抽象,那么唯一剩下的就是主存,也就是内存的分配问题了。在早期的计算机中,程序是直接运行在物理内存上的,也就是说,程序在运行时所访问的地址都是物理地
2016-03-03 18:06:38 981
原创 设备驱动
操作系统作为硬件层的上层,它是对硬件的管理和抽象。对于操作系统上面的运行库和应用程序来说,它们希望看到的是一个统一的硬件访问模式。作为应用程序的开发者,我们不希望在开发应用程序的时候直接读写硬件端口、处理硬件中断等这些繁琐的事情。由于硬件之间千差万别,它们的操作方式和访问方式都有区别。比如我们希望在显示器上面画一条直线,对于程序员来说,最好的方式是不管计算机使用什么显卡、什么显示器,多少大
2016-03-03 18:06:02 518
原创 CPU
多道程序(Multiprogramming) : 在计算机发展的早期,CPU资源非常昂贵,如果一个CPU只能运行一个程序,那么当程序读写磁盘(当时可能是磁带)时,CPU就空闲下来了,这在当时简直是暴殄天物。于是人们很快编写了一个监控程序,当某个程序暂时无需使用CPU时,监控程序就把另外的正在等待CPU资源的程序启动,使得CPU能够充分地利用起来。这种被称为 多道程序(Multiprogr
2016-03-03 18:05:35 588
原创 操作系统做什么?
操作系统的一个功能就是提供抽象的接口,另外一个主要功能是管理硬件资源。 计算机硬件的能力是有限的,比如一个CPU一秒钟能够执行的指令条数是1亿条或者是1GB的内存能够最多同时存储1GB的数据。 无论你是否使用它,资源总是那么多。当然我们不希望自己花钱买回来的 hardware成为摆设,充分挖掘硬件的能力,使得计算机运行得更有效率,在更短的时间内处理更多的任务,才是我们
2016-03-03 18:05:05 509
原创 计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决
系统软件这个概念其实比较模糊,传统意义上一半将用于管理计算机本身的软件称为系统软件,以区别普通的应用程序。系统软件可以分成两块, 一块是平台性的,比如操作系统内核、驱动程序、运行库和数以千计的系统工具;另外一块是用于程序开发的,比如 编译器,链接器,汇编器等开发工具和开发库。计算机系统软件体系结构采用一种层的结构,有人说过一句名言:“计算机科学领域的任何问题都可
2016-03-03 18:04:26 11363 3
pthread源代码
2015-05-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人