lesson 4 磁盘

原创 2016年08月31日 15:29:13

   

 磁盘在计算机中并不可少的,决定计算机运行速度快慢的瓶颈在磁盘上。

 硬盘的发展    软盘-> 叠片式->SSD芯片式硬盘(500MB,民用,2000MB,商用)。

 磁盘和内存息息相关。

   

磁盘:

存储数据的地方 

  • 寄存器 :速度最快,数量最少,最贵  在cpu内部        
  • 内存   :  一般快,一般多,一般贵  通过内存地址来进行访问的,内存地址不代表内存
  • 磁盘   :    速度最慢,数量最多,最便宜

 

电脑在执行程序时,有两种方式取数据

第一种方式:  CPU直接从磁盘中取数据,取回寄存器中再进行运算后,再将数据存储到磁盘中

第二种方式:  通过内存, 将硬盘当中的内容加载到内存中, CPU直接访问内存。 

访问内存来进行运算,当CPU中的寄存器存储不下数据,跟内存交互速度更快。


存储程序式计算机

将程序(App)存储在一个固定的地方,当运行的时候,只需要执行一次加载。

加快磁盘的运作

磁盘的介质决定了运行速度

以前使用外部介质(纸条)来存储数据(图灵机)

内存从硬盘当中读取数据要花费时间,我们设计了磁盘缓存来减少这部分时间。

磁盘缓存:

     以前在(win95/win98/现在的浏览器)第一次读取的时候 ,在使用磁盘数据时,同时把数据加载在内存中 ,第二次使用的时候直接从内存中读取。( 数据库和服务端大量的使用缓存技术  )


虚拟内存

把内存当磁盘用,速度解决了,但是内存不够用了 。于是有了虚拟内存。

    将磁盘当中的一块当作内存来使用。比如 要使用1GB的空间 ,内存只有128M的时候,通过虚拟内存的方式将程序运行起来,但是CPU只能执行物理内存当中的程序,就会出现两个东西 物理内存和虚拟内存。当前可用的内存有5MB,运行的程序有10MB,从磁盘上划分出5MB做加载用,当需要使用到这块内存的时候,再与物理内存进行交换。

     windows下通过分页式分段式来进行数据的存储,例如当cpu需要执行某一段代码时,比如在物理内存放了代码的1,2,3行,虚拟内存中放了4,5,6行,执行完1,2,3行后,和 4,5,6行进行一个交换。

分段式

    需要运行的程序以处理集合(以里面的逻辑分段),物理内存里存储当前需要运行的段落,其余的放在虚拟内存里面。使用时进行交换。

分页式

把程序做成一页一页的大小,以页为单位在物理内存和虚拟内存中交互。


硬盘上的灯一直在闪,或者卡 ,loading 就是程序在进行内存之间的交互。

winXP 中的4GB内存空间是通过虚拟内存空间来做到的

增加内存提高电脑的运行速度是因为内存之间做页面交互的次数少了。


节约内存的编程方式

 1.函数共用 :动态加载   DLL 动态链接库 

  假设电脑中运行着两个程序,A,B,A和B都有一个相同的方法: 显示。我们通过动态链接库来存储这个方法。在windows操作系统里,有很多DLL,需要用时直接调用,一块内存可以被无限使用,来达到节省内存的目的。 

2.被调用方清理栈 

   程序最终会编程二进制机器码,对应的是汇编。我们需要在程序里进行计算,存储一些临时使用的值。在内存里面有一块专门的区域来专门存储这些临时的值。这块地址就是栈。(栈不能无限大)使用完成后,栈需要回收。 一般清理栈是在一个函数调用完成之后进行清空,函数的调用分为两种调用方式: _stdcall (windows)和其他方式。

  1. _stdcall      被调用方底部生成addesp8     更加节省内存   调用完再清理
  2. 其他方式:在调用代码的下面 用addesp8进行栈的清理   每调用一次清理一次

 

 3.数据压缩: 

    例如 AAAAAABBCCCDDDD  如果用 A6B2C3D4 来代表会节省空间   这就是RLE压缩算法 能很好的压缩图像,exe.(exe有很多0000的空白区),无法有效压缩文本( 有时候会造成空间扩大 

        对于文本压缩: 哈弗曼算法 

   比如一遍很长的文章,先计算各字符出现频率的 使用编码的方式。对于出现频道最高的用最短的编码方式表示,第二高的用第二短的..... 还原时通过编码信息还原。


硬盘:

  扇区  : 磁盘上的每个磁道被等分为若干个弧段,这些弧段便是磁盘的扇区。硬盘的读写以扇区(簇,512byte)为基本单位

在整体进行读写的时候以的方式来运行 ,1 簇等于1个扇区 。512byte,意味着存储一个了一个2byte的文件,会变成512byte.一簇里面不能有相同的文件。

   

版权声明:本文为博主原创文章,未经博主允许不得转载。

lesson 4 随堂测试解析

po学校mark老师上课笔记
  • xiedaimadejudy
  • xiedaimadejudy
  • 2016年08月31日 07:24
  • 110

Codility上的练习 (13)

(1)AbsDistinct给定一个按非递减顺序排好顺序的非空整数数组,问里面右多少种不同的绝对值。数据范围:整数数组长度[1..10^5], 整数范围[-2147483648, +214748364...
  • caopengcs
  • caopengcs
  • 2014年12月10日 06:50
  • 3108

Lesson 4:指针和自由存储空间

指针是最重要的知识点之一,它容易让人出错,学好指针并且用好指针是每个人学编程的人应该掌握的。个人看来,当系统的学了计算机组成原理、操作系统等基础教材之后,才能对指针,地址这些抽象概念有一个更好的理解。...
  • ko_tin
  • ko_tin
  • 2016年07月07日 16:17
  • 339

10分钟探索神经网络背后的生物学启发 | Neural Networks #6

神经网络在线课由Google Brain团队的研究员Hugo Larochelle授权雷锋字幕组中文翻译,是以神经网络基础知识为主的短视频在线课。每次10分钟,了解神经网络基础概念,轻松上手深度学习算...
  • Y0W1as5eg37urFdS
  • Y0W1as5eg37urFdS
  • 2017年12月25日 00:00
  • 126

磁盘 I/O 性能监控指标和调优方法

磁盘 I/O 性能监控指标和调优方法 在介绍磁盘 I/O 监控命令前,我们需要了解磁盘 I/O 性能监控的指标,以及每个指标的所揭示的磁盘某方面的性能。磁盘 I/O 性能监控的指标主要包括:...
  • haiross
  • haiross
  • 2015年01月22日 13:40
  • 838

[4] Linux磁盘管理

[4] Linux磁盘管理4.1 df 命令 检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。 -h 显示合适的单位 -i ...
  • github_39069288
  • github_39069288
  • 2017年06月20日 00:56
  • 197

Lesson 4: 窗口大小和客户区大小

当我们调用CreateWindowEx()函数时,我们使用了500*400来设置窗口的大小。然而,这和客户区的大小是不一样的。客户区为窗口的一部分,游戏软件通常都在客户区完成游戏中的各种画面、功能与效...
  • coderNim
  • coderNim
  • 2016年12月12日 23:51
  • 151

记一次磁盘IO高问题排查过程

我们服务器搭建了cacti进行监控,一次通过查看磁盘IO图像的时候,发现每天凌晨3:20-3:35的时候磁盘IO一下飙的很高,然后想知道到底是哪个进程占用那么高的IO,下面是解决方法: 写个检测脚本...
  • zhangrenfang
  • zhangrenfang
  • 2013年08月26日 17:19
  • 2129

openstack在cinder部分设计的磁盘细节

一、LVM简介 LVM是 Logical Volume Manager(逻辑卷管理)的简写,它由Heinz Mauelshagen在Linux 2.4内核上实现。LVM将一个或多个硬盘的分区在逻...
  • u010986451
  • u010986451
  • 2016年11月18日 19:11
  • 841

NIT ACM 2014 寒假集训#1 初阶组

。。
  • sky_miange
  • sky_miange
  • 2015年01月27日 17:42
  • 1069
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:lesson 4 磁盘
举报原因:
原因补充:

(最多只允许输入30个字)