1)IO事件的产生

cpu轮循、硬件通知机制

2)识别硬件:

硬件层次:

1、IO端口、缓冲器

2、可编程中断控制设备:设备注册 不同的中断信号

软件/操作系统层次:

命名通过数字或字母

linux一切皆文件:设备文件:访问设备的接口、设备类型b,c

命名方式: 硬件接口

接口速率:IDE:133MB/S,SCSI:670MB/S,SATA:700MB/S,SAS:700MB/S,USB:450MB/S

3)接收时:数据要被处理:CPU指挥着数据载入到内存,然后到cpu。

4)track,cylinder,sector

track: 存储数据,

cylinder:不同盘片,相同编号的track

sector: 每个track中划分

虚拟扇区: 不同track,sector数量一样,大小一样,

mbr:512bytes, uefi:4k

mbr: 446(引导加载器) 64分区表 2 55AA(510有效)

逻辑分区和扩展分区的编号机制,扩展任意编号 逻辑从5开始

一、硬件

cpu(运算器、控制器), 内存,硬盘(U盘)、网络设备,键盘、鼠标、显示器

1)cpu cpu的个数并非越多越好,1个和尚挑水喝,2个和尚抬水喝,为什么3个和尚没水喝?_,cpu内控制器用于完成硬件的控制,多个cpu时,可能会发生硬件资源争用,需要通过内核和硬件体系自身完成协调,协同工作。

如果协调的好,多个CPU能够发挥单个CPU多倍的性能,否则协调时间占比越大,性能不升反降

2)内存 Random Access Memory “易失性存储”暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。不断的填充电荷保证数据的持久

3)硬盘:硬盘是电脑主要的存储媒介之一,由一个或者多个铝制或者玻璃制的碟片组成。碟片外覆盖有铁磁性材料。

4)网卡:网卡是工作在链路层的网络组件,是局域网中连接计算机和传输介质的接口,不仅能实现与局域网传输介质之间的物理连接和电信号匹配,还涉及帧的发送与接收、帧的封装与拆封、介质访问控制、数据的编码与解码以及数据缓存的功能等。

二、内核

1、软件层次,需要较为复杂的逻辑实现协调硬件工作

2、抽象硬件功能为系统调用、库调用

3、驱动硬件,让硬件工作起来。第三方提供商所提供硬件的驱动,为避免驱动内的恶意代码,安装驱动时会检查硬件驱动的 数字签名 ....

4、对硬件的管理,仅在硬件驱动层次的管理,对硬盘的使用、空间的分配,由用户间的程序

程序员面向的编程接口

硬件规格:写程序时,将会考虑更多与硬件相关的特性(cpu,ram,...)

系统调用:简化硬件接口,较为底层

库调用:系统call二次封装

IOevent的基本概念


"如何"得知产生硬件事件 -- I/O设备触发IO事件 -- CPU如何知道"哪个"硬件需要有数据产生或需要获取数据 --- CPU通知内核 -- 内核决定接收或拒绝数据

一、cpu如何得知硬件产生了事件或有数据产生?


轮循:也被称为忙等待,等待别人输入数据,自己忙的团团转,CPU定时发出询问,依序询问每一个周边设备是否需要其服务,有即给予服务,服务结束后再问下一个周边,接着不断周而复始。

通知机制:任何一个I/O设备当其有数据传输的需要时 或 有I/O事件到达时,设备通知给CPU。


二、cpu如何识别是哪个硬件有数据传输的需要


1)硬件层次:硬盘工作的内置的电器特性实现

可编程中断控制设备:微处理器与外设之间的中断处理的桥梁,由外设发出的中断请求需要中断控制器来进行处理。

此设备上有多个针脚,每个针脚可供硬件设备注册使用,CPU中由硬件设备注册使用的不同的中断信号

针脚数量小,但是可以复用

针脚可以基于某种形式复用

i/o端口:16bits二进制数字定义端口,每个端口是一个缓冲器,一共有2^16=65535种变化或端口,每个硬件都会在cpu处注册使用不同的端口,一般说来:其中1个端口用来发送数据,1个端口用于接收数据,cpu根据不同的端口判断不同的硬件。

2)软件层次

   由linux哲学思想“一切皆文件”

识别设备:

人易读的是字母:设备文件

内核只能数字:   设备号码

抽象为文件的优点:对设备的操作仅需要通过简洁的文件接口实现

文件接口:read(),write(),open(),close()

设备类型:

块设备:随机访问设备: 存储单位 "块" 硬盘

字符设备: 线性访问敲锣:存储单位 "字符" 键盘

设备文件是一种特殊文件,是设备的访问入口

1
2
3
4
5
6
7
8
9
10
11
12
crw-rw-rw-   1 root     root       1,   3 Jul 31 14:51 /dev/null
c        字符型
rw-      
rw-      
rw-      
1       
左root   
右root    
1 major number 主设备号码:标示不同的设备类型
3 minor number 次设备号码:同一类型设备下不同的设备
########没有文件大小,对于设备文件来说,只有metadata(属性信息),没有data

设备文件的命名:依据设备的接口

主机与设备的建立关联关系

主板提供接口

线缆:硬件设备和主板接口交互数据传输专门设计

工业标准:有统一的标准、电压、同步调工作

CentOS 5:    ide /dev/hd[a-z], scsi sata sas usb /dev/sd[a-z]

CentOS 6+: ide scsi sata sas usb /dev/sd[a-z]

相同设备不同分区命名:

/dev/sda[1- oo]

不同接口的接口速率

并口:IDE: 133MB/S , SCSI: 640MB/S

串口:SATA 3.0: 6GPbs == 700MB/S , SAS: 6Gpbs

并口:多条线缆间的信号干扰,干扰后就会导致重传 ,为了避免干扰,传输速率只能降低。

串口:单线无干扰,单车道只要 步调一致时,每秒只要传送更多的数据位即可

USB 3.0: 450MB/S

实际体验速率取决于两个方面:

1、接口速率

2、硬盘,例如同样是SATA 3.0,固态硬盘和机械式硬盘哪个快?同样是机械式硬盘,同样的接口,西数和西捷哪个快?

机械式硬盘的基本工作机制

组成

盘片,磁头,盘片转轴及控制电机,磁头控制器,数据转换器,接口,缓存等几个部分组成。

track,磁道:用于存储数据的位置,密度越高,存储大小越大

硬盘两面读写

柱面:不同盘片的不同盘面有相同编号的磁道

扇区:每个磁道划分成的小的区域

虚拟扇区:虚拟视图上看,在整个硬盘上,每个磁道,扇区大小一样,数量一样

    扇区的大小: mbr(512bytes) uefi(4k)


磁头每个盘面有一个磁头,磁头距离盘面不到几毫米,磁头固定在同一个组合臂上

    距离近,避免划伤硬盘,应该避免振动。


机械式硬盘的分区方式

分区:把一个存储空间逻辑角度上划分为多个不同的空间。 当作不同的硬件设备各自独立使用

如何分区:按柱面分,由外向内多个柱面组合在一起作一个分区,再由外向内多个柱面组合在一起作一个分区,....。

分区的特点:越靠外的柱面,单位时间内划过的或磁头所能走过的距离越长,数据读写率越向,越靠内越差。 一般分区的编号由外向内依次增大


磁盘识别分区:

    硬盘的0柱面,0磁道,0扇区,系统预留的,不属于任何分区,512bytes

MBR(Master Boot Record) 主引导记录

512 bytes = 64bytes + 446bytes + 2 bytes

446bytes: 引导加载器 bootloader

64bytes:保存分区表,比尔盖茨认为的,当时只有1M大小的硬盘,分为4个分区足以。16bytes为一个分区。

1
2
3
4个主分区
3个主分区(1,2,3) + 1扩展(4)+n个逻辑分区
**扩展分区可以为1,逻辑分区起始的编号 一定为5.

2bytes: 5A , 前510个bytes有效

注意:mbr分区当硬盘大于2T时,只能识别2T。大于2T的硬盘只能用GPT格式分区。

分区管理工具

fdisk(各发行版均会提供) 管理15个分区

parted,sfdisk

查看内核识别的分区

# cat /proc/partitions

让内核重读分区表

# partx -a <disk>

-n M[-N]

M     指定分区

M-N 指定范围

kpartx命令

kpartx [OPTIONS...] /dev/DEV-FILE

-a 添加分区映射

-f 强制添加

centos5上: partprobe /dev/DEV-FILE

fdisk命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#  type fdisk
fdisk is /usr/sbin/fdisk
[root@izpo45bh60h6bsz ~]# fdisk --help
Usage:
 fdisk  <disk>    change partition table
     Command action
       d   删除一个分区
       l   列出所有id,id用于标示用于那种操作系统的标示
       m   获取帮助
       n   创建一个新分区
       p   显示已有分区
       q   放弃更新并退出
       t   改变分区id
       w   将更新写入磁盘并退出
 fdisk [options] -l <disk> list partition table(s)
  
 fdisk -l ##列出所有分区表
 fdisk -l <disk> ##列出指定的分区表

使用示例

查看所有磁盘分区

1
2
[root@localhost ~]# fdisk -l
[root@localhost ~]# fdisk -l /dev/[sh]d[a-z]

查看指定分区

1
[root@localhost ~]# fdisk -l /dev/sda

添加分区

==进入管理分区表的命令行

==显示已有的分区,mbr中只能有4个分区,如果要更多时,需要添加扩展分区

==当前分区编号为2可以继续添加主分区

==显示添加的结果,并保存退出

显示当前内核中识别的分区信息

内核重读分区表(此处多添加了一个扩展分区和逻辑分区,添加扩展分区见结尾处)

删除指定的分区

======添加扩展分区=====验证逻辑分区只能从5开始

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
1、查看指定设备
[root@localhost ~]# fdisk -l /dev/sdb
Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
[root@localhost ~]
2、分区
[root@localhost ~]# fdisk  /dev/sdb  ##改变/dev/sdb分区表
Command (m for help): n              ##添加一个新分区
Command action
   e   extended
   p   primary partition (1-4)
e                        ##逻辑分区
Partition number (1-4): 1
First cylinder (1-2610, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): 
Using default value 2610
Command (m for help): p
Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x52ca09b2
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        2610    20964793+   5  Extended     ##扩展分区可为1
Command (m for help): n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
l
First cylinder (1-2610, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +10G
Command (m for help): p
Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x52ca09b2
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        2610    20964793+   5  Extended
/dev/sdb5               1        1306    10490382   83  Linux   ##逻辑分区起始区5
Command (m for help):

本文转自 lccnx 51CTO博客,原文链接:http://blog.51cto.com/sonlich/1954050,如需转载请自行联系原作者

Linux之磁盘管理,分区相关推荐

  1. Linux命令-磁盘管理(二)

    Linux命令-磁盘管理(二) Linux mmount命令 Linux mmount命令用于挂入MS-DOS文件系统. mmount为mtools工具指令,可根据[mount参数]中的设置,将磁盘内 ...

  2. LINUX下磁盘管理的基本流程与相关操作命令

    LINUX下磁盘管理的基本流程与相关操作命令 磁盘的管理 添加磁盘 格式化分区 磁盘挂载 磁盘的管理 在Linux中我们可以通过以下几种方式来查看我们所用的磁盘 (1)df命令: 还可以添加后缀命令( ...

  3. centos图形化磁盘文件管理_CentOS7磁盘管理-分区扩容-使用gparted图形化工具或系统命令...

    centOS7磁盘管理-分区扩容-使用gparted图形化工具或系统命令 @了解centos下磁盘结构 无标题.png 解释 PE - 物理块(Physical Extent) 硬盘上有很多实际物理存 ...

  4. Linux系统命令——磁盘管理命令

    目录 查看使用量 df du 磁盘分区 fdisk lsblk查看磁盘 查看分区文件 磁盘格式化 mount/umount挂载/卸载 mount挂载 开机自动挂载 umount卸载 Linux磁盘管理 ...

  5. Linux系统磁盘管理总结

    1. Linux系统磁盘管理体系 (1) Linux的磁盘管理主要分为5个步骤: ① 在Linux服务器上添加相应的硬盘(如/dev/sda.sdb.sdc-): ② 对全新的服务器(没有操作系统)做 ...

  6. linux对磁盘进行分区_如何在Linux中对磁盘进行分区

    linux对磁盘进行分区 在Linux中创建和删除分区是一种常规做法,因为在使用存储设备(如硬盘驱动器和USB驱动器)之前,必须先对其进行某种结构化. 在大多数情况下,大型存储设备被分为称为parti ...

  7. Linux创建磁盘并分区命令

    Linux创建磁盘并且分区命令 目录 1.首先创建磁盘 1.1 首先点击虚拟机,再点设置 1.2点击内存在点下面的磁盘添加 1.4 添加磁盘向导 2.创建磁盘分区 2.1 启动Linux,用超级管理员 ...

  8. linux入门--磁盘管理之分区、格式化与挂载

    前面系列文章讲解了VI编辑器.常用命令.防火墙及网络服务管理,本篇将讲解磁盘管理相关知识. 本文将会介绍大量的Linux命令,其中有一部分在"linux入门系列5--新手必会的linux命令 ...

  9. Linux命令 磁盘管理——了解磁盘、磁盘分区

    了解磁盘 电脑硬盘是计算机最主要的存储设备.硬盘(港台称之为硬碟,英文名:Hard Disk Drive, 简称HDD 全名温彻斯特式硬盘)由一个或者多个铝制或者玻璃制的碟片组成.这些碟片外覆盖有铁磁 ...

最新文章

  1. php遍历数组哪个效率高,PHP遍历数组的三种方法及效率对比分析
  2. 仅需12层网络,在ImageNet上准确率达到80.7%!普林斯顿大学最新提出ParNet!
  3. jvm的生命周期:启动、执行、退出
  4. 剑指OFFER之跳台阶(九度OJ1388)
  5. html表格右键可编辑,Bootstrap table右键功能实现方法
  6. vertical-align属性详解
  7. mac os touch命令_Mac系统忘记开机密码怎么办?
  8. 【狂神说Redis】1NoSQL概述1-2什么是NoSQL
  9. 正态分布推导瑞利分布,瑞利信道的模型
  10. CompoundButton
  11. matlab闭合导线代码,【求助】闭合导线简易平差Matlab代码需要大神帮忙
  12. python爬取中国大学排名_Python爬取中国大学排行榜
  13. 微信小程序中使用video组件
  14. [WPF] WPF浏览器程序:如何发布并解决不信任程序问题
  15. [LaTex报错解决]Unicode character , (U+FF0C)
  16. html里的常用特殊符号表示大全
  17. 深入学习Linux摄像头(一)v4l2应用编程
  18. 【web前端】小人行走
  19. linux命令行显示主机名和当前目录
  20. 高通骁龙820A凭什么能赢得众多车厂的芳心

热门文章

  1. PHP 开发中的外围资源性能分析(一)
  2. Android 核心分析 之六 -----IPC框架分析 Binder,Service,Se...
  3. How to create DBFS file system
  4. ActiveMQ学习(七)
  5. 数据库路由中间件MyCat - 源代码篇(15)
  6. 广度优先搜索 BFS算法
  7. 企业中的混乱:如何对云计算具有信心
  8. 洛谷—— P1605 迷宫
  9. iOS开发网络篇—NSURLConnection基本使用(一)
  10. Linux管道指令(pipe)与shell 重定向的区别