windows如何区分光盘?

windows如何区分光盘?,windows,operating-system,ram,hard-drive,Windows,Operating System,Ram,Hard Drive,我想知道windows如何区分不同的驱动器和内存模块,我的意思是windows如何将某些特定内容写入光盘C或光盘D。 在每种编程语言中,当您声明变量时,它会被保存到内存中,当您需要将某些内容存储到hdd时,您必须使用一些库。 那么,windows是如何处理的呢? 它是否将所有光盘和内存模块视为一行数据,是否只保存每个介质的起始地址与0x00000一样,0x15616是光盘C的开始位置。在现代Windows(2000或更高版本)中,C:是指向类似于设备\HarddiskVolume1的符号链接。那

我想知道windows如何区分不同的驱动器和内存模块,我的意思是windows如何将某些特定内容写入光盘C或光盘D。 在每种编程语言中,当您声明变量时,它会被保存到内存中,当您需要将某些内容存储到hdd时,您必须使用一些库。 那么,windows是如何处理的呢? 它是否将所有光盘和内存模块视为一行数据,是否只保存每个介质的起始地址与0x00000一样,0x15616是光盘C的开始位置。

在现代Windows(2000或更高版本)中,
C:
是指向类似于
设备\HarddiskVolume1
的符号链接。那里的人数可能会有所不同。通常,
\Device\Bootpartition
也是指向同一
硬盘卷的符号链接

Windows不使用库写入磁盘。相反,它使用驱动程序。主要区别在于,驱动程序作为操作系统内核的一部分运行,而库作为应用程序的一部分运行。

正如@MSalters所说

C:是一个符号链接,类似于Device\HarddiskVolume1

这意味着Windows上的磁盘驱动程序实现为虚拟文件系统,有点像Linux上的虚拟文件系统。我将解释Linux,因为有更多的文档,但Windows的答案非常相似,尽管两个操作系统的操作方式不同

基本上,Linux上的所有内容都是一个文件。Linux附带磁盘驱动程序,因为它们是每台计算机的基础。Linux像每个操作系统一样公开了一个驱动程序模型。用于文件(包括硬盘)的Linux驱动程序模型公开了内核将调用以读取/写入磁盘的函数。内核希望为文件驱动程序提供一些打开、读取和写入函数

如果需要,您可以编写一个磁盘驱动程序并替换现有的驱动程序。您可以将驱动程序编写为模块,然后使用Linux附带的某些实用程序将其加载到内核中。我不会透露更多细节,因为我不太清楚。一旦代码加载到内核中,它就可以访问所有内核代码和所有硬件,因为它在内核模式下运行

今天,磁盘驱动程序可能使用PCI DMA,这是一种连接到PCI总线的控制器,允许执行忽略CPU的磁盘操作,并将磁盘数据直接加载到RAM。PCI协议规定,所有兼容设备(如PCI DMA控制器)必须向计算机公开特定接口。该接口主要是一些内存映射寄存器,可用于向控制器发送命令。操作系统将在这些寄存器中写入数据,以通知DMA控制器执行磁盘操作。一旦完成,DMA控制器将触发中断。然后,操作系统将知道数据很容易加载到RAM中并准备好使用。这同样适用于写作


操作系统通过在开机时查看ACPI表来知道这些寄存器的位置。

我是新手,所以我的问题很傻,但是驱动程序是如何工作的呢?想象一下,你正在尝试编写这些驱动程序在C++中。硬盘中的数据实际上是如何存取的?您是否将所有hdd视为一个单独的单元,每个hdd都有自己的部分?例如,C驱动器可以是从地址0x0000到0x123456789的所有内容,然后D驱动器将具有从0x123456789到0x987654321的所有地址,然后您可以在特定地址声明变量?