Trong các hệ điều hành tương tự Unix, tập tin thiết bị hoặc tập tin đặc biệt là giao diện tới driver thiết bị nằm trong hệ thống tập tin như một tập tin thông thường. Ngoài ra còn có các tập tin đặc biệt trong DOS, OS/2 và Windows. Các tập tin đặc biệt này cho phép ứng dụng chương trình tương tác với thiết bị bằng cách sử dụng driver thiết bị thông qua việc gọi các lệnh hệ thống đầu vào/đầu ra tiêu chuẩn. Sử dụng lệnh gọi hệ thống tiêu chuẩn giúp đơn giản hóa nhiều tác vụ lập trình và dẫn đến cơ chế nhập/xuất trong không gian người dùng được nhất quán bất kể tính năng và chức năng của thiết bị ra sao.
Tập tin thiết bị thường có giao diện đơn giản cho các thiết bị tiêu chuẩn (chẳng hạn như máy in và cổng nối tiếp) nhưng cũng có thể được sử dụng để truy cập các tài nguyên cụ thể duy nhất trên các thiết bị đó chẳng hạn như phân vùng đĩa. Ngoài ra các tập tin thiết bị cũng hữu ích trong việc truy cập tài nguyên hệ thống không kết nối tới bất kỳ thiết bị thực tế nào, chẳng hạn như các bồn chứa dữ liệu và trình khởi tạo số ngẫu nhiên.
Có hai loại tập tin thiết bị chung trong hệ điều hành tương tự Unix được gọi là character special file và block special file. Sự khác biệt giữa chúng nằm ở lượng dữ liệu được đọc và ghi bởi hệ điều hành và phần cứng. Cả 2 có thể được gọi là tập tin đặc biệt của thiết bị trái ngược với các đường hầm có tên (named pipes) không được liên kết với thiết bị nhưng cũng không phải là tập tin thông thường.
MS-DOS mượn khái niệm tập tin đặc biệt từ Unix và đổi tên chúng thành thiết bị' (device).[1] Bởi vì các phiên bản đầu tiên của MS-DOS không hỗ trợ hệ thống phân cấp thư mục, các thiết bị được phân biệt với các tập tin thông thường bằng tên được đặt từ từ dành riêng, ví dụ: CON
. Chúng được chọn để có tương thích mức độ với CP/M và vẫn tồn tại trong nhiều phiên bản Windows hiện đại để tương thích ngược.
Trong một số hệ thống tương tự Unix, hầu hết các tập tin thiết bị được quản lý như một phần của hệ thống tập tin ảo được thiết lập với nhau như bình thường trong /dev
, có thể được liên kết với một daemon điều khiển để theo dõi việc thêm và bỏ phần cứng tại thời điểm chạy, thực hiện các thay đổi tương ứng với hệ thống tập tin thiết bị nếu điều đó không được thực hiện tự động bởi nhân hệ thống, có thể gọi các tập lệnh trong không gian hệ thống hoặc người dùng để xử lý các nhu cầu thiết bị đặc biệt. FreeBSD, DragonFly BSD và Darwin có một hệ thống tập tin chuyên dụng là devfs; các nút thiết bị được quản lý tự động bởi hệ thống tập tin này, trong không gian nhân. Linux đã từng triển khai một hệ thống devfs tương tự nhưng nó đã bị bỏ mặc không phát triển sau đó và sau đó bị loại bỏ hoàn toàn khỏi hệ thống kể từ phiên bản 2.6.17;[2] Linux hiện nay triển khai tích hợp hệ thống được gọi là udev trong không gian người dùng nhưng nó cũng có nhiều biến thể.
Trong các hệ thống Unix hỗ trợ phân tách quy trình chroot chẳng hạn như Solaris Containers, thông thường mỗi môi trường chroot cần có /dev
của riêng nó; các điểm gắn kết này sẽ hiển thị trên hệ điều hành chủ tại các nút khác nhau trong cây hệ thống tập tin chung. Bằng cách hạn chế các nút thiết bị được đưa vào các phiên bản chroot của /dev
, môi trường chroot có thể thực thi việc phân tách phần cứng (một chương trình không thể can thiệp vào phần cứng nếu nó không nhìn thấy hoặc đặt tên — một hình thức kiểm soát truy cập thậm chí còn mạnh hơn các quyền của hệ thống tập tin Unix).
MS-DOS quản lý xung đột thiết bị phần cứng (xem TSR) bằng cách mở riêng từng tập tin thiết bị. Một ứng dụng cố gắng truy cập vào một thiết bị đã được sử dụng sẽ bị phát hiện và sẽ không thể mở được nút tập tin thiết bị. Nhiều ràng buộc driver thiết bị đã được định nghĩa trong Unix và Linux liên quan đến truy cập đồng thời.[3]
Các nút thiết bị tương ứng với các tài nguyên mà nhân của hệ điều hành đã được cấp phát. Unix xác định các tài nguyên đó bằng một số chính và một số phụ,[4] cả hai đều được lưu trữ như một phần của cấu trúc nút. Việc gán những con số này xảy ra duy nhất trong các hệ điều hành khác nhau và trên các nền tảng máy tính khác nhau. Nói chung, số chính xác định driver thiết bị và số phụ xác định một thiết bị cụ thể (nếu có nhiều thiết bị) mà driver đang phân phối:[5] trong trường hợp này, hệ thống có thể chuyển số phụ cho driver. Tuy nhiên, điều này có thể không xảy ra trong trường hợp phân bổ số động (ví dụ: FreeBSD 5 trở lên).
Cũng như các loại tập tin đặc biệt khác, hệ thống máy tính truy cập các nút thiết bị bằng cách sử dụng các lệnh gọi hệ thống tiêu chuẩn và xử lý chúng như các tập tin máy tính thông thường. Hai loại tập tin thiết bị tiêu chuẩn tồn tại; Thật không may, tên của chúng khá phản trực giác vì những lý do lịch sử và kết quả còn lại ta có được là những giải thích không mấy chính xác về sự khác biệt giữa chúng.
Character special file hoặc character device không có bộ đệm, có quyền truy cập trực tiếp vào thiết bị phần cứng. Chúng không nhất thiết cho phép các chương trình đọc hoặc viết các ký tự đơn lẻ tại một thời điểm; điều đó tùy thuộc vào thiết bị truy cập. Ví dụ, character device cho đĩa cứng sẽ yêu cầu tất cả các lần đọc và ghi phải được căn chỉnh để chặn các ranh giới và chắc chắn sẽ không cho phép đọc một byte đơn lẻ.
Các character device đôi khi được gọi là raw device để tránh sự nhầm lẫn, sự thật là một character device cho phần cứng dựa trên khối thường sẽ yêu cầu các chương trình đọc và ghi các khối đã được căn chỉnh.
Block special file hay block device cung cấp quyền truy cập có đệm vào các thiết bị phần cứng và cung cấp một số thông tin tóm tắt từ các chi tiết cụ thể của chúng.[6] Không giống như các character device, các block device sẽ luôn cho phép lập trình viên đọc hoặc ghi một khối có kích thước bất kỳ (bao gồm các ký tự hoạc byte đơn lẻ) và bất kỳ liên kết nào. Nhược điểm là bởi vì các block device được lưu vào bộ đệm, lập trình viên không biết sẽ mất bao lâu trước khi dữ liệu đã ghi được chuyển từ bộ đệm của nhân đến thiết bị thực hoặc phải theo thứ tự hai lần ghi riêng biệt mới đến thiết bị vật lý. Ngoài ra nếu cùng một phần cứng mà hiển thị cả character device và block device thì phần cứng đó sẽ có nguy cơ bị hỏng dữ liệu do khách hàng sử dụng character device không biết về những thay đổi được thực hiện trong bộ đệm của block device.
Hầu hết các hệ thống tạo ra cả block device và character device để đại diện cho phần cứng như đĩa cứng. Đáng chú ý điều đó không áp dụng với FreeBSD và Linux; người trước thì đã loại bỏ hỗ trợ cho các block device,[7] trong khi người sau chỉ hỗ trợ tạo ra các block device. Trong Linux, để có được character device cho đĩa, người ta phải sử dụng một "raw" driver, mặc dù người ta có thể nhận được kết quả tương tự như sử dụng character device bằng cách mở block device bằng cờ O_DIRECT
.
Các nút thiết bị trên các hệ thống tương tự Unix không nhất thiết phải tương ứng với các thiết bị vật lý. Các nút thiếu sự tương ứng này tạo thành nhóm thiết bị giả. Chúng cung cấp các chức năng khác nhau do hệ điều hành xử lý. Một số thiết bị giả (dựa trên ký tự) được sử dụng phổ biến nhất bao gồm:
Ngoài ra, các thiết bị giả dành riêng cho BSD có giao diện ioctl cũng có thể bao gồm:
Các nút được tạo bởi lệnh gọi hệ thống mknod. Chương trình dòng lệnh để tạo các nút còn được gọi là mknod. Các nút có thể được di chuyển hoặc xóa bằng các lệnh gọi hệ thống tập tin thông thường (rename, unlink) và các lệnh (mv, rm).
Một số phiên bản Unix có sẵn một tập lệnh có tên là makedev hay MAKEDEV để tạo tất cả các thiết bị cần thiết trong thư mục /dev
. Nó chỉ có ý nghĩa trên các hệ thống có thiết bị được gán số chính tĩnh (ví dụ: bằng cách mã hóa cứng nó trong mô-đun nhân của hệ điều hành).
Trong khi một số hệ thống Unix khác như FreeBSD chỉ sử dụng quản lý nút thiết bị dựa trên nhân thông qua devfs và không hỗ trợ tạo nút thủ công. Lệnh gọi hệ thống mknod(2) và lệnh mknod(8) tồn tại để giữ khả năng tương thích với POSIX, các nút thiết bị được tạo thủ công bên ngoài devfs tất nhiên sẽ không hoạt động.[9]
Các tiền tố sau được sử dụng cho tên của một số thiết bị trong phân cấp /dev
để xác định loại thiết bị:
lp
: in dòng (line printer, so sánh lp)pt
: terminal giả (terminal ảo)tty
: terminalMột số tiền tố bổ sung đã được sử dụng phổ biến trong một số hệ điều hành:
fb
: bộ đệm khung (frame buffer)fd
: (nền tảng) đĩa mềm, mặc dù cách viết tắt tương tự này cũng thường được sử dụng để chỉ trình mô tả tập tinhd
: ("cổ điển") driver IDE (trước đây được sử dụng cho ổ đĩa cứng ATA, ổ đĩa quang ATAPI,...)
hda
: thiết bị chính trên kênh ATA đầu tiên (thường được xác định bằng số chính 3 và số phụ 0)hdb
: thiết bị phụ trên kênh ATA đầu tiênhdc
: thiết bị chính trên kênh ATA thứ haihdd
: thiết bị phụ trên kênh ATA thứ haiparport
, pp
: các cổng song songmem
: Bộ nhớ chính (character device)nvme0
: driver của thiết bị đã đăng ký đầu tiên (character device)nvme0n1
: không gian tên đầu tiên của thiết bị được đăng ký đầu tiên (block device)nvme0n1p1
: phân vùng đầu tiên của không gian tên đầu tiên của thiết bị được đăng ký đầu tiên (block device)sd
: driver lưu trữ hàng loạt (block device)
sda
: thiết bị đăng ký đầu tiênsdb, sdc
,...: thiết bị đã đăng ký thứ hai, thứ ba,...ses
: Driver bọcsg
: lớp SCSI chungsr
: driver "ROM" (ổ đĩa quang định hướng dữ liệu; scd chỉ là một bí danh phụ)st
: driver băng từtty
: terminal
ttyS
: (nền tảng) driver cổng nối tiếpttyUSB
: Bộ chuyển đổi nối tiếp USB, modem,...Danh sách chuẩn của các tiền tố được sử dụng trong Linux có thể được thấy trong danh sách thiết bị Linux, sổ đăng ký chính thức của số thiết bị được phân bổ và các nút thư mục /dev
cho hệ điều hành Linux.[10]
Đối với hầu hết các thiết bị, tiền tố này được theo sau bởi một số nhận dạng thiết bị duy nhất cụ thể. Đối với ổ cứng, một ký tự được sử dụng để xác định thiết bị và theo sau là một số để xác định phân vùng. Vì vậy, một hệ thống tập tin có thể "biết" một khu vực trên đĩa là /dev/sda3
chẳng hạn, hoặc "thấy" một terminal đã nối mạng được liên kết với /dev/pts/14
.
Trên các đĩa sử dụng bản ghi khởi động chính của máy tính, số thiết bị của phân vùng chính và phân vùng mở rộng tùy chọn được đánh số từ 1 đến 4 trong khi chỉ mục của bất kỳ phân vùng logic nào là 5 trở đi, bất kể bố cục của phân vùng cũ (vùng đã sinh chúng mở rộng phân vùng không cần phải là phân vùng thứ 4 trên đĩa cũng như không cần phải tồn tại ở cả 4 phân vùng chính).
Tên thiết bị thường thay đổi giữa các biến thể hệ thống tương tự Unix khác nhau, ví dụ: trên một số hệ thống BSD, thiết bị IDE được đặt tên là /dev/wd0, /dev/wd1,...
devfs là một hệ thống tích hợp của hệ thống tập tin thiết bị trên hệ điều hành tương tự Unix, được sử dụng để hiển thị tập tin thiết bị. Cơ chế triển khai cơ bản có thể khác nhau, tùy thuộc vào hệ điều hành.
Việc duy trì các tập tin đặc biệt này trên hệ thống tập tin được thực hiện vật lý (ví dụ như bằng ổ cứng,...) không thuận tiện và vì dù sao nó cũng cần hỗ trợ nhân nên ý tưởng về một hệ thống tệp logic có mục đích đặc biệt là để tránh lưu trữ vật lý.
Ngoài ra, việc xác định thời điểm các thiết bị sẵn sàng xuất hiện không hoàn toàn là chuyện nhỏ. Cách tiếp cận của 'devfs' tới driver thiết bị là yêu cầu tạo và xóa các mục 'devfs' liên quan đến thiết bị mà nó kích hoạt hoặc vô hiệu hóa.
Tập tin thiết bị là một từ khóa dành riêng được sử dụng trong hệ thống PC DOS, TOS, OS/2 và Windows để cho phép truy cập vào một số cổng và thiết bị nhất định.
MS-DOS mượn khái niệm tập tin đặc biệt từ Unix nhưng đổi tên chúng thành các thiết bị' (device)'.[1] Bởi vì các phiên bản đầu tiên của MS-DOS không hỗ trợ hệ thống phân cấp thư mục, các thiết bị được phân biệt với các tập tin thông thường bằng tên được đặt từ từ dành riêng. Điều này có nghĩa là một số tên tập tin nhất định được dành riêng cho các thiết bị và không được dùng để đặt tên cho các tập tin hoặc thư mục mới.[11] Bản thân các tên dành riêng đã được chọn để tương thích với việc xử lý "tập tin đặt biệt" của lệnh PIP
trong CP/M. Có hai loại thiết bị trong DOS: Block Device (được sử dụng cho ổ đĩa) và Character Device (nói chung là tất cả các thiết bị khác, bao gồm cả thiết bị COM và PRN).[12]
DOS sử dụng các tập tin thiết bị để truy cập máy in và cổng. Hầu hết các phiên bản Windows cũng có hỗ trợ điều này, nó có thể gây nhầm lẫn khi cố gắng tạo các tập tin và thư mục có tên tương tự vì chúng không thể có những tên này.[13] Các phiên bản 2.x của MS-DOS cung cấp tham số AVAILDEV
trong CONFIG.SYS, nếu được đặt thành FALSE
thì các tên đặc biệt này chỉ hoạt động nếu có tiền tố là \DEV\
, do đó hệ thống cho phép các tệp thông thường được tạo với các tên này[14]
GEMDOS, một phần giống DOS của Atari TOS, hỗ trợ các tên thiết bị tương tự như DOS nhưng không giống hoàn toàn như DOS, nó yêu cầu ký tự ":" ở cuối (đây là tùy chọn trên DOS) để xác định chúng là thiết bị khác với tên tập tin thông thường (do đó "CON:" sẽ hoạt động trên cả DOS và TOS, nhưng "CON" sẽ chỉ là tên của một tập tin thông thường trên TOS, nhưng trên DOS nó là tập tin driver thiết bị). Trong MiNT và MagiC, chế độ xem hệ thống tập tin hợp nhất tương tự UNIX đặc biệt được sử dụng thông qua ký tự ổ đĩa "U:", cụ thể là trong "U:\DEV".
Từ khóa thiết bị[13] | Sử dụng làm đầu vào | Sử dụng làm đầu ra |
---|---|---|
CON | Nhận dữ liệu đã nhập cho đến khi nhấn ^Z (Ctrl-Z). | In dữ liệu ra console. |
PRN[15] | — | In văn bản tới trình in, thường được chuyển hướng đến LPT1 hay LST. Đôi khi có thể cấu hình lại cho các thiết bị khác.[16][17][18] |
AUX (không phải trong OS/2[15]) | Đọc dữ liệu từ thiết bị phụ trợ, thường là thiết bị nối tiếp như COM1. Đôi khi có thể cấu hình lại cho các thiết bị khác.[16][17][18] | Gửi dữ liệu đến thiết bị phụ trợ, thường là thiết bị nối tiếp như COM1. Đôi khi có thể cấu hình lại cho các thiết bị khác.[16][17][18] |
NUL | Trả về null hoặc không có dữ liệu. | Từ chối nhận dữ liệu |
CLOCK$ (vẫn được đặt tên là CLOCK trong một số phiên bản MS-DOS 2.11[19][16][17]) | — | — |
KEYBD$ (chỉ trong MS-DOS đa nhiệm) | ? | ? |
KBD$ (chỉ trong OS/2[15]) | ? | ? |
SCREEN$ (chỉ trong MS-DOS đa nhiệm và OS/2[15]) | ? | ? |
POINTER$ (chỉ trong OS/2[15]) | ? | ? |
MOUSE$ (chỉ trong OS/2[15]) | ? | ? |
$IDLE$ (chỉ trong DR-DOS (từ 5.0) và DOS đa người dùng (thuộc Concurrent DOS 386)) | — | — |
CONFIG$ (chỉ trong MS-DOS 7.0 và cao hơn) | — | — |
LST (chỉ trong 86-DOS và DOS 1.x, cũng có trong MS-DOS 2.11 của Hewlett-Packard cho HP Portable Plus[16][17]) | Không trả về dữ liệu. | Gửi dữ liệu đến trình in dòng. (LPT2 cho MS-DOS 2.11 của Hewlett-Packard[16][17]) |
PLT (chỉ trong MS-DOS 2.11 của Hewlett-Packard cho HP Portable Plus[16][17]) | Không trả về dữ liệu. | Gửi dữ liệu đến trình vẽ được chỉ định trước. Có thể cấu hình lại thiết bị trình vẽ kèm theo.[16][17] |
LPT1, LPT2, LPT3 và đôi khi là LPT4 (trong DR-DOS 7.02 trở lên và một số phiên bản của DOS đa người dùng) | — | Gửi dữ liệu đến cổng song song đã chọn. |
COM1, COM2, COM3, COM4 | Đọc dữ liệu từ cổng nối tiếp đã chọn. | Gửi dữ liệu đến cổng nối tiếp đã chọn. |
82164A (chỉ trong MS-DOS 2.11 của Hewlett-Packard cho HP Portable Plus[16][17]) | Chuyển hướng tới COM2. | Chuyển hướng tới COM2. |
Sử dụng shell chuyển hướng và các đường hầm, dữ liệu có thể được gửi đến hoặc nhận từ một thiết bị. Ví dụ: nhập nội dung sau sẽ gửi tệp c:\data.txt
đến máy in:
TYPE c:\data.txt > PRN
PIPE, MAILSLOT và MUP là các thiết bị Windows tiêu chuẩn khác.[20]
Hệ điều hành 8-bit của máy tính bỏ tủi Sharp như PC-E500, PC-E500S... sử dụng trình thông dịch BASIC, một hệ thống kiểm soát tập tin 12-bit FAT của DOS 2 (FCS) và Hệ thống kiểm soát đầu vào/đầu ra (IOCS) của BIOS triển khai một số driver character device và block device tiêu chuẩn cũng như các tập tin đặc biệt bao gồm STDO:/SCRN: (hiển thị), STDI:/KYBD: (bàn phím), COM: (Serial I/O), STDL:/PRN: (trình in), CAS: (băng cassette), E:/F:/G: (tập tin bộ nhớ), S1:/S2:/S3: (thẻ nhớ), X:/Y: (đĩa mềm), SYSTM: (hệ thống) và NIL: (chức năng).[21]
Hệ điều hành | Hệ thống tập tin hoặc phần mềm quản lý | Điểm gắn kết tiêu chuẩn | Tác giả | Ghi chú |
---|---|---|---|---|
Linux 2.3.46pre5–2.6.17 | devfs[22] và devfsd | /dev
|
Richard Gooch | Được triển khai hoàn toàn trong nhân với daemon devfsd tùy chọn để xử lý các sự kiện nút thiết bị trong không gian người dùng.[23] Đã lỗi thời - người dùng được khuyến khích chuyển sang udev và/hoặc devtmpfs. |
Linux 2.5– | udev trên bất kỳ hệ thống tập tin nào nhưng thường là tmpfs | /dev
|
Greg Kroah-Hartman, Kay Sievers và Dan Stekloff | Phần lớn được triển khai trong không gian người dùng, thông tin thiết bị được thu thập từ sysfs. Các tập tin thiết bị có thể được lưu trữ trên hệ thống tập tin có mục đích chung thông thường hoặc trong hệ thống tập tin bộ nhớ (tmpfs). |
Linux 2.6.32– | devtmpfs có hoặc không có udev | /dev
|
Kay Sievers, Jan Blunck, Greg Kroah-Hartman | Phương pháp tiếp cận nhân/không gian người dùng kết hợp của hệ thống tập tin thiết bị để cung cấp các nút trước khi udev chạy trong lần đầu tiên[24] |
Solaris | devfs[25] | /devices
|
Sun Microsystems | Được giới thiệu với các driver được tải động trong Solaris-2.1 |
FreeBSD 2.0– | devfs | /dev
|
Poul-Henning Kamp | Tích hợp đầy đủ trong nhân. |
DragonFly BSD 2.3.2– | devfs | /dev
|
Alex Hornung | Tích hợp đầy đủ trong nhân. |
macOS | devfs | /dev
|
Apple Inc. | Tích hợp đầy đủ trong nhân. |
HP-UX B.11.31 | devfs | /dev
|
HP | Tích hợp đầy đủ trong nhân. |
Plan 9 | #
|
Bell Labs | Tích hợp trong nhân. | |
RISC OS | DeviceFS | Devices:
|
Acorn Computers | DeviceFS được bắt đầu vào năm 1991[26] và lần đầu tiên xuất hiện trong RISC OS 3. Nó quản lý một số thiết bị như các tập tin đặc biệt, phổ biến nhất là: Parallel, Serial, FastParallel và USB. Mô-đun SystemDevices thực hiện các thiết bị giả như: Vdu, Kbd, Null và Trình in. |
MS-DOS, PC DOS, DR-DOS | FAT | \DEV (và /DEV )
|
đa dạng | Khi được triển khai trong nhân, các device character sẽ xuất hiện trong thư mục ảo \DEV và bất kỳ thư mục đĩa nào. Trong MS-DOS/PC DOS 2.x, directive CONFIG.SYS AVAILDEV=FALSE có thể được sử dụng để buộc các thiết bị chỉ tồn tại trong \DEV. |
MagiC, MiNT, MultiTOS | U:\DEV [27][28]
|
Application Systems Heidelberg, Eric R. Smith, Atari Corp. | Ổ U: đặc biệt chứa một thư mục DEV ảo mà trong đó có thể thấy các tập tin thiết bị. | |
Windows 9x | \\devices\
|
Microsoft | ||
Windows NT | \Device
|
Microsoft | Thư mục \Device là một phần không gian tên đối tượng của Windows NT.
| |
Hệ thống con Windows NT Win32 | \\.\
|
Microsoft | Tiền tố \\.\ làm cho các API hỗ trợ truy cập vùng tên thiết bị Win32 thay vì vùng tên tập tin Win32. Tên thiết bị Win32 là các liên kết tượng trưng đến tên thiết bị trong thư mục \Device Windows NT.
|
The next step beyond a single-open device is to let a single user open a device in multiple processes but allow only one user to have the device open at a time.
Devfsd provides configurable management of device nodes using the Linux Device Filesystem.