磁盘结构简介

本文详细解释了老式磁盘的物理结构及其组成部分,包括磁道、扇区和柱面等,并介绍了现代磁盘如何通过改进扇区分布提高存储效率。此外还提到了Linux下的磁盘分区概念。

鏈接一:http://www.cnblogs.com/joydinghappy/articles/2511948.html

鏈接二:http://blog.youkuaiyun.com/taoshengyang/article/details/5416675



这里讲的主要是网上所谓的老式磁盘,它是由一个个盘片组成的,我们先从个盘片结构讲起。如图1所示,图中的一圈圈灰色同心圆为一条条磁道,从圆心向外画直线,可以将磁道划分为若干个弧段,每个磁道上一个弧段被称之为一个扇区(图践绿色部分)。扇区是磁盘的最小组成单元,通常是512字节。

图1 老式磁盘一个盘片的结构 

 

图2展示了由一个个盘片组成的磁盘立体结构,一个盘片上下两面都是可读写的,图中蓝色部分叫柱面(cylinder)。

 图2 老式磁盘的整体结构

 

简简单介绍了磁盘结构后,下面我们将对磁盘的参数进行讲解。磁盘的常见参数如下:

  • 磁头(head)
  • 磁道(track)
  • 柱面(cylinder)
  • 扇区(sector)
  • 圆盘(platter)

图2中磁盘是一个 3个圆盘6个磁头,7个柱面(每个盘片7个磁道) 的磁盘,图2中每条磁道有12个扇区,所以此磁盘的容量为6*7*12*512字节。

即:

     存储容量 = 磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数

 

下面讲一下现代磁盘,在老式磁盘中,尽管磁道周长不同,但每个磁道上的扇区数是相等的,越往圆心扇区弧段越短,但其存储密度越高。不过这种方式显然比较浪费空间,因此现代磁盘则改为等密度结构,这意味着外围磁道上的扇区数量要大于内圈的磁道,寻址方式也改为以扇区为单位的线性寻址。为了兼容老式的3D寻址方式,现代磁盘控制器中都有一个地址翻译器将 3D 寻址参数翻译为线性参数。

 

 图3 一张Linux的分区表

 如图3所示,在Linux中是以柱面为单位来分区的。这里分区大小除以Blocks数的值约1024说明,在磁盘上读写时的最小单位是1024字节----这是我猜的。



### 爬虫系统架构及主要组成部分 爬虫系统的架构通常可以划分为多个模块,这些模块协同工作以完成网页抓取、数据分析以及存储的任务。以下是爬虫系统的主要组成部分及其功能描述: #### 1. **爬虫调度器** 爬虫调度器负责协调整个爬虫的工作流程,控制各个组件之间的交互。它决定哪些 URL 需要被抓取,何时抓取,以及如何分配资源给不同的任务[^2]。 #### 2. **URL管理器** URL管理器用于管理和维护待抓取的 URL 列表和已抓取的 URL 记录。它的作用是避免重复抓取相同的页面,并确保所有的目标页面都能被访问到。对于大规模的数据采集场景,URL管理器还需要具备高效的数据结构来处理海量链接。 #### 3. **HTML下载器** HTML 下载器的功能是从互联网上获取指定 URL 的 HTML 页面内容。这一部分可能涉及 HTTP 请求发送、响应接收、超时设置、代理配置等操作。为了提高效率,在分布式环境中还可以实现并发下载机制。 #### 4. **HTML解析器** HTML 解析器用来提取从网页中获得的信息。通过分析 HTML 文档结构,它可以定并抽取感兴趣的数据字段(如标题、正文、图片地址等)。常用的工具和技术有正则表达式、XPath 或 CSS Selector 等方法。 #### 5. **数据存储器** 最后一步是将解析出来的有用信息保存下来。这可以通过文件系统写入本地磁盘或者上传至数据库服务器等方式实现。具体采用哪种方式取决于项目需求和个人偏好。 当扩展到分布式环境时,除了上述五个基本单元外,还需考虑更多因素比如错误恢复机制、动态调整任务优先级算法、合理分发计算负担等功能模块[^1]。 ```python import requests from bs4 import BeautifulSoup def fetch_and_parse(url): try: response = requests.get(url, timeout=10) soup = BeautifulSoup(response.text, 'html.parser') # 假设我们只关心文章标题 titles = [] for title_tag in soup.find_all('h1'): titles.append(title_tag.text.strip()) return titles except Exception as e: print(f"Error occurred while processing {url}: {e}") return [] urls_to_crawl = ["http://example.com/page1", "http://example.com/page2"] results = {} for url in urls_to_crawl: results[url] = fetch_and_parse(url) print(results) ``` 此脚本展示了简单的单线程版本爬虫框架雏形,其中包含了请求发起(`requests`)与DOM树遍历检索逻辑(`BeautifulSoup`)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值