inode 到底是什么,Windows 中是否有类似实现?

前言

今天操作系统课上老师问了一句 Windows 中是否也有 inode,我想这个概念应该是文件系统里的,无关乎操作系统,但深入研究下去,发现还有更深层次的意义。

正文

inode 是一个 POSIX 协议中定义的数据结构,用来描述文件系统中具体的文件对象(文件、目录等)。

而POSIX 可移植操作系统接口(英语:Portable Operating System Interface,缩写为POSIX)的由来是IEEE 为了在各种UNIX操作系统上运行软件,而定义API等一系列互相关联的标准的总称,其正式称呼为IEEE Std 1003,国际标准名称为ISO/IEC 9945。此标准源于一个大约开始于1985年的项目。

毕竟操作系统那么多,标准协会还是希望大家在保留个性的同时,拥有行业共性,以便于开发者和用户方便开发与使用软件,现在大家即使使用的是不同的平台(Windows、MacOS),也拥有差不多的软件生态,标准的制定与行业执行功不可没。

以下是维基百科对 inode 的定义

The inode (index node) is a data structure in a Unix-style file system that describes a file-system object such as a file or a directory. Each inode stores the attributes and disk block locations of the object's data.[1] File-system object attributes may include metadata (times of last change,[2] access, modification), as well as owner and permission data.[3]

A directory is a list of inodes with their assigned names. The list includes an entry for itself, its parent, and each of its children.

Linux 和 MacOS 都是典型的类Unix操作系统,拓展一点,其实 Linux 只是个内核,但因为 Linux Kernel 开源,社区和企业会根据自己的需求对上游的 Linux Kernel 做出个性化修改,所以更多时候 Linux 表示的是一系列发行版( Linux内核 + 软件生态 )的总称

你能看到的像是Archlinux、Fedora、Redhat、Ubuntu、Debian、SUSE、Gentoo、NixOS……都叫 Linux,准确说就是 Linux 的发行版。还有个有意思的丶就是,如果你拆开看 Linux ,其实他是 Linux is not unix 的递归简写。

其次POSIX 是 Unix 的标准,1974年,贝尔实验室正式对外发布Unix。因为涉及到反垄断等各种原因,加上早期的Unix不够完善,于是贝尔实验室以慷慨的条件向学校提供源代码,所以Unix在高校中获得了很多支持与发展。于是出现了好多独立开发,且与Unix基本兼容但又不完全兼容的OS,统称为Unix-like OS。Linux 和 MacOS 就是两个类 Unix 系统,自然大部分支持 POSIX 标准,所以在 MacOS 和 Linux 下运行 ls -i 都可以看到 inode 编号,但是 Windows 只支持了部分 POSIX 标准,命令行中 ls 甚至都无法运行。但他也有类似于 inode 一样用于标记和描述文件的数据结构,文档链接:FILE_ID_INFO (winbase.h) - Win32 apps | Microsoft Learn

typedef struct _FILE_ID_INFO {
  ULONGLONG   VolumeSerialNumber;
  FILE_ID_128 FileId;
} FILE_ID_INFO, *PFILE_ID_INFO;

可以看到这个数据结构与 inode 相似。

虽然 Windows 对 POSIX 标准支持不完全,但 POSIX 对我们如今计算机的影响是方方面面的,例如一些基础的系统工具,像是C编译器,以及编程的接口、shell 程序(Windows 没有, Windows 里类似的软件是 cmd 控制台)等等,都因为 POSIX 标准得到了统一。

想必大家有时也会苦恼为什么这个软件在Windows 上有,在安卓上没有,虽然一个是桌面操作系统一个是移动操作系统,但是刚才提到的 C 编译器等基础软件一定是无视操作系统差异甚至无视 CPU 架构差异同时兼容两个系统的。也正是这些基础工具的存在,才使得我们要移植一些程序到其他平台才变得相对容易很多,如果对桌面应用开发很熟悉的话,一定听说过 electron 这个跨平台框架,他利用的就是浏览器的跨平台特性来实现最小的成本开发跨平台应用程序,现在使用 QQ NT 架构的最新版 QQ 就是基于此框架开发的。而浏览器为啥能跨平台呢?前面已经解释过了,基础工具都是通用的,那么想做到跨平台有何不可呢?也许未来的某一天,我们能迎来一个真正的通用操作系统,无视移动端与桌面端的交互差异,打通移动与桌面的生态,兼具移动端的轻便与桌面端的效率。那时候再说什么跨平台都显得有些过时了吧。

对于 POSIX 的一些统一,可以给大家举个例子,以下是我的两台设备,一个是在 ARM 芯片上运行的 MacOS,一个是在 X86 芯片上运行的 Archlinux,学过计组的我们知道,不同芯片架构的指令集是不一样的,ARM 是精简指令集,X86 是复杂指令集,大家可以看到,两个拥有着截然不同 CPU 架构与操作系统的环境,却可以同时运行同一个程序 neofetch、拥有同一个 shell 环境和 gcc 编译器,虽然这也是开源运动(可以单开一篇讲)的功劳,但是在以后将要学习的计算机网络等专业课里,我们还能接触到很多类似的标准与协议,也许我们不知道他为何设计,但我们确实都已经受益于中了。

引用与扩展阅读

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
Source: https://github.com/zhaoolee/ChineseBQB
Source: https://github.com/zhaoolee/ChineseBQB
Source: https://github.com/zhaoolee/ChineseBQB
颜文字
Emoji
小恐龙
花!
滑稽大佬
演奏
程序员专属
上一篇