金字塔形的存储设备,操作系统的抽象概念
系统在数据的创书上花费了大量的时间.硬件开发商(主要是那个做存储介质的人)为了减少这种数据传输的时间成本,此阿勇了以中高速缓存的技术去减少这种时间成本.
高速缓存被置放于处理器中,与处理器中寄存器文件直接进行数据交换,这样大大较少了数据传输的时间成本,使得程序的运行速度可以得到数倍的提升.作为一个搞电脑的,入股可以适当的利用高速缓存去存放一些程序运行过程中常用的数据,可以将程序的运行速度提高数倍甚至数个数量级.
你回想一下在网页中,你第一个打开一个网页,可能很慢,但是当你打开第二次的时候,可能快点了,多开几次可能很快乐,你如果知道怎么查看缓存的话,你肯定能知道你缓存了该网页不少的图片啥的.说这个例子,没啥特别的,就是想告诉你关于缓存的一点东西.我想告诉你高速缓存的重要性.
下图展示了硬件分布中,告诉缓存的位置.
存储设备的金字塔
当今的计算机系统中,基本上全部都置入了各种各样的存储设备,这些存车设备呈明显的层次结构,他们的特定是容量越大,速度越慢(你的硬盘容量较大,但是速度呢?)因此如果按照容量和速度将他们以图示的方式呈现出来的话,看起来像一个金字塔(如果你书序学得好的话,就是一个什么随着x增大
y减小的函数,我数学不好,不知道咋描述,你懂).盗个图
英文版,咋办?想想那个函数,x变大,y减小,x代表容量,y代表速度.联系起来.
解释一下这个图:左边的意思更小更快但是也更贵的存储设备,包括寄存器以及L1-L3的高速缓存,以及更大更慢更便宜的存储设备,包括主存,贝蒂磁盘,以及远程存储设备.通常意义上,我们将上一层的存储设备作为当前设备的高速缓存,比如L1的告诉缓存是寄存器,L2的高速缓存是L1,以此类推.
OS是硬件的管理者
操作系统是帮我们控制硬件的软件,它就像是应用程序与硬件程序的中间这,在两之间扮演一个翻译的角色,关系如下图:
OS操作系统提供了几个我们属性的概念去表示硬件,,比如进程,虚拟存储器,文件.他们表示的硬件设备如下所示:
能看出文件是对I/O设备的抽象描述,而虚拟存储器是对主存和I/O设备的统称吗?最后还有一个,进程在此基础上又加入了处理器.
什么意思呢,就是说对于操作系统来所,这些硬件其实都被抽象化了,对于OS来说,文件就是I/O设备.
进程
进程是操作系统对一个正在运行的程序的抽象.OS会记录每一个进程的状态,这些状态就称作进程的上下文.这些状态主要包括了PC,寄存器以及主存的当前内容.当OS在进程间切换的时候,也会切换相应的上下文,从而保证进程恢复到之前的状态.
在进程当中,又被计算机界的大神们引入了线程的概念,没办法又得学,我想起了我高中的时候,数学老师说过一句话,如果有人穿越了,在高斯5岁的时候把他弄死,咱们的数学课本最少得薄一半....
虚拟存储器
对于我这种渣渣来说,什么是寻你存储器都不知道,今天一起学习,虚拟存储器是一种抽象描述,从物理上讲,它包含了I/O设备和主存.在逻辑上讲,虚拟存储器被描述为虚拟地址空间.下图为进程的虚拟地址空间表示:
(看完这个图我真心不知道这个图想说啥,看不懂)
这里的地址自上向下依次增大,可以看出.图中标注了起始地址,分别为0x08048000(32位)以及0x00400000(64位),然后向上分别是只读代码和数据,读写数据,运行时堆,共享库的内存映射区间,用户栈以及内核虚拟内存区域.
好多新名词,记不住没关系,慢慢来.在所记住了这个玩意也没啥用处.要真正理解了.
程序代码和数据:这些内容的起始地址就是0x08048000,首先是代码,然后是一些全局变量.
堆:是运行时可以动态扩展的一部分内村区域,他可以由malloc和free这样的标准库函数操作.
共享库:用于存放共享库的代码和数据.
栈:在用户虚拟地址空间的顶部是栈,这部分区域与函数的执行有密切的关系.
内核虚拟存储区域:内核是OS的一部分,Linux内核应该听过吧?内核可以看作一个进程,在计算机运行期间总是在运行着,因此这部分内存区域对用户程序是不可见的,通俗的说就是不能用的.
文件
文件是I/O设备逻辑上的概念,他其实就是字节序列,也就是0和1组成的一些信息.因此所有的I/O设备,包括磁盘,键盘,鼠标,显示器都可以看成是文件.
网络
所有的I/O设备其实都是文件这一概念的具体表现.na,e网络其实也是稳健的一种,因为所到底,他也可以被看做是一系列的字节序列.网络适配器的作用就是给计算输入一堆被传送过来的字节序列,这里面可能包括图片,文字甚至可能是代码等等.