① linux中普通文件和塊設備文件的區別
1,概述
一直都搞不明白普通文件跟塊文件的區別,總覺得一個普通的文件是存放在磁碟塊上,那它既屬於普通文件又屬於塊設備文件。剛好下午睡了一個大頭覺,比較清醒,集中學習了下普通文件和塊設備文件的區別和聯系。
本文從基本概念,定址空間,內核讀寫幾個方面介紹普通文件和塊設備文件的辯證統一。
2,基本概念
普通文件(Regular File)。指普通意義上的文件,如數據文件、可執行文件等。
設備文件(Device File)。類unix操作系統都是基於文件概念的,文件是由位元組序列而構成的信息載體。根據這一點,可以把IO設備當作設備文件這種所謂的特殊文件來處理;因此,與磁碟上的普通文件進行交互所用的同一系統調用可直接用於IO設備。根據設備驅動程序的基本特徵,設備文件可以分為兩種:塊和字元。這兩種硬體設備之間的差異並不容易劃分,但我們至少可以假定以下的差異:[1]
· 塊設備的數據可以隨機地被訪問,而且從人類用戶的觀點看,傳送任何數據塊所需的時間都是較少而且是大致相同的。塊設備的典型例子是硬碟、軟盤[1]。塊設備一般情況下是帶緩沖區的。
· 字元設備的數據或者不可以隨機訪問,或者可以被隨機訪問,但是訪問隨機數據所需的時間很大程度上依賴於數據在設備內的位置[1]。
3, 定址空間的區別
塊設備文件是塊設備的物理定址空間;普通文件是塊設備的虛擬定址空間。普通文件比塊設備文件多一層文件系統的地址轉換機構。
② LINUX,下面設備文件中那些是字元設備文件
比如你生成
xxx.ko
插入這個模塊是
sudo
insmod
xxx.ko
刪除是
sudo
rmmod
xxx.ko
同時,可以通過
lsmod
查看系統內核中已有模塊
③ linux用mknod怎麼創建設備,創建了設備怎麼用
mknod命令用於創建一個設備文件,即特殊文件
首先要明白什麼是設備文件,簡單的我們說 操作系統與外部設備(入磁碟驅動器,列印機,modern,終端 等等)都是通過設備文件來進行通信的,在Unix/Linux系統與外部設備通訊之前,這個設備必須首先要有一個設備文件,設備文件均放在/dev目錄下
一般情況下在安裝系統的時候系統自動創建了很多已檢測到的設備的設備文件,但有時候我們也需要自己手動創建,命令行生成設備文件的方式有 insf,mksf,mknod等等
根據mknod命令的使用參數來看【mknod Name { b | c } Major Minor 】,使用mknod之前,至少要明白以下幾點:
設備文件類型:分為塊設備和字元設備。ls -l /dev 結果顯示第一個欄位有b*** 和 c****,這里即標識了塊設備和字元設備。
字元設備文件----字元設備文件傳送數據給設備的時候,一次傳送一個字元,終端,列印機,繪圖儀,modern等設備都經過字元設備文件傳送數據
塊設備---系統通過塊設備文件存取一個設備的時候,先從內存中的buffer中讀或寫數據,而不是直接傳送數據到物理磁碟,這種方式能有效的提高磁碟和CD-ROMS的I/O性能。磁碟和CD-ROMS即可以使用字元設備文件也可使用塊設備文件。
主號和次號:
主號:當在任意目錄使用ls -l 時,結果的第5個欄位就是主號,設備主號代表了這個設備使用的是哪個設備驅動程序
次號:次號是一個24位的十六進制數字,定義了設個設備在系統中的物理的位置
就拿我們常用的創建卷組來看;
先來看看mknod 命令,如果該設備文件你想放在一個特定的文件夾下當然就先創建文件夾
mknod 設備文件名[/dev/xyz] b/c 主號 次號
{ mkdir /dev/vg01
mknod /dev/vg01/group c 64 0X010000
}
創建之後,就可以使用你想要創建的設備對於德創建命令了,如我現在的卷組的創建命令:
vgcreate /dev/vg01 /dev/dsk/c*t*d*
一直進行下去
之後的步驟根據不同的設備而不盡相同
④ 什麼叫字元型設備,什麼叫塊設備為什麼在unix中這兩種設備都以特別文件的形式出現
字元型設備文件:以單個字元為單位
塊設備文件:存取是以一個字塊為單位
普通文件的處理是不必要對硬體進行過多操作的,而字元型設備和塊設備就不同了,所以是以特別形式文件出現
⑤ Linux下字元設備文件的概念及舉例
不是後綴,記住linux不使用後綴來識別文件類型
你使用 ls -al
drwxr-xr-x. 4 root root 100 Apr 26 15:05 cpu
lrwxrwxrwx. 1 root root 13 Apr 26 15:05 fd -> /proc/self/fd
brw-rw----. 1 root disk 7, 0 Apr 26 15:05 loop0
crw-rw----. 1 root lp 6, 2 Apr 26 15:05 lp2
你仔細看第一位 d代表文件目錄文件,l代表鏈接文件,b代表塊設備文件,c代表字元設備文件
`-'
regular file
`b'
block special file
`c'
character special file
`C'
high performance ("contiguous data") file
`d'
directory
`D'
door (Solaris 2.5 and up)
`l'
symbolic link
`M'
off-line ("migrated") file (Cray DMF)
`n'
network special file (HP-UX)
`p'
FIFO (named pipe)
`P'
port (Solaris 10 and up)
`s'
socket
`?'
some other file type
⑥ linux中什麼是塊文件
實話,只了解一個文件不形象,找了一點資料。相互聯系的。希望對你有用。當然,裡面也有塊的解釋,而且說的還是不錯的。
系統中能夠隨機(不需要按順序)訪問固定大小數據片(chunks)的設備被稱作塊設備,這些數據片就稱作塊。最常
見的塊設備是硬碟,除此以外,還有軟盤驅動器、CD-ROM驅動器和快閃記憶體等等許多其他塊設備。注意,它們都是以安裝文件系統的方式使用的——這也是塊設備
的一般訪問方式。
另一種基本的設備類型是字元設備。字元設備按照字元流的方式被有序訪問,像串口和鍵盤就都屬於字元設備。如果一個硬體設備是以字元流的方式被訪問的話,那就應該將它歸於字元設備;反過來,如果一個設備是隨機(無序的)訪問的,那麼它就屬於塊設備。
這兩種類型的設備的根本區別在於它們是否可以被隨機訪問——換句話說就是,能否在訪問設備時隨意地從一個位置跳轉到另一個位置。舉
個例子,鍵盤這種設備提供的就是一個數據流,當你敲入「fox」
這個字元串時,鍵盤驅動程序會按照和輸入完全相同的順序返回這個由三個字元組成的數據流。如果讓鍵盤驅動程序打亂順序來讀字元串,或讀取其他字元,都是沒
有意義的。所以鍵盤就是一種典型的字元設備,它提供的就是用戶從鍵盤輸入的字元流。對鍵盤進行讀操作會得到一個字元流,首先是「f」,然後是「o」,最後
是「x」,最終是文件的結束(EOF)。當沒人敲鍵盤時,字元流就是空的。硬碟設備的情況就不大一樣了。硬碟設備的驅動可能要求讀取磁碟上任意塊的內容,
然後又轉去讀取別的塊的內容,而被讀取的塊在磁碟上位置不一定要連續,所以說硬碟可以被隨機訪問,而不是以流的方式被訪問,顯然它是一個塊設備。
內核管理塊設備要比管理字元設備細致得多,需要考慮的問題和完成的工作相比字元設備來說要復雜許多。這是因為字
符設備僅僅需要控制一個位置—當前位置—而塊設備訪問的位置必須能夠在介質的不同區間前後移動。所以事實上內核不必提供一個專門的子系統來管理字元設備,
但是對塊設備的管理卻必須要有一個專門的提供服務的子系統。不僅僅是因為塊設備的復雜性遠遠高於字元設備,更重要的原因是塊設備對執行性能的要求很高;對
硬碟每多一分利用都會對整個系統的性能帶來提升,其效果要遠遠比鍵盤吞吐速度成倍的提高大得多。另外,我們將會看到,塊設備的復雜性會為這種優化留下很大
的施展空間。
簡單來講,塊設備可以隨機存取,而字元設備不能隨機存取,那裸設備又該如何解釋呢?
難道裸設備,如磁碟裸設備也不能隨機讀取嗎?那在資料庫中用裸設備建一個2g的數據文件,為了存取最後一個數據塊,難道ORACLE還要把前面的所有數據塊都讀一遍,顯然不符合事實,如果這樣解釋呢,操作系統不能隨機讀取,並不意味著資料庫也不能隨機讀取。
塊設備通過系統緩存進行讀取,不是直接和物理磁碟讀取。字元設備可以直接物理磁碟讀取,不經過系統緩存。(如鍵盤,直接相應中斷)
⑦ linux中什麼是塊設備和字元設備
塊設來備是I/O設備中的一類,是將信源息存儲在固定大小的塊中,每個塊都有自己的地址,還可以在設備的任意位置讀取一定長度的數據。數據塊的大小通常在512位元組到32768位元組之間。塊設備的基本特徵是每個塊都能獨立於其它塊而讀寫。
字元設備是在I/O傳輸過程中以字元為單位進行傳輸的設備。在linux系統中,字元設備以特別文件方式在文件目錄樹中占據位置並擁有相應的結點。結點中的文件類型指明該文件是字元設備文件。可以使用與普通文件相同的文件操作命令對字元設備文件進行操作。
(7)塊或字元設備文件如何定義擴展閱讀:
在大多數的linux操作系統中,塊設備只支持以塊為單位的訪問方式,如磁碟等。KYLIN支持以字元方式來訪問塊設備,即支持以字元為單位來讀寫磁碟等塊設備。所以在/dev目錄中的塊設備,如磁碟等,均以字元設備的外觀出現。
當一台字元型設備在硬體上與主機相連之後,必須為這台設備創建字元特別文件。linux操作系統的mknod命令被用來建立設備特別文件。
參考資料來源:
網路——塊設備
網路——字元設備
⑧ 誰知道linux用mknod怎麼創建設備,創建了設備怎麼用
mknod命令用於創建一個設備文件,即特殊文件
操作系統與外部設備
(例如:磁碟驅動器,列印機,modern,終端 等等)都是
通過設備文件來進行通信
的,在Unix/Linux系統與外部設備通訊之前,這個設備必須首先要有一個設備文件,
設備文件均放在/dev目錄下。
一般情況下在安裝系統的時候系統自動創建了很多已檢測到的設備的設備文件,但有時候我們也需要自己手動創建,命令行生成設備文件的方式有 insf,mksf,mknod等等
根據mknod命令的使用參數來看【mknod Name { b | c } Major Minor 】,使用mknod之前,至少要明白以下幾點:
設備文件類型:分為塊設備和字元設備。ls -l /dev 結果顯示第一個欄位有b*** 和 c****,這里即標識了塊設備和字元設備。
字元設備文件----字元設備文件傳送數據給設備的時候,一次傳送一個字元,終端,列印機,繪圖儀,modern等設備都經過字元設備文件傳送數據。
塊設備---系統通過塊設備文件存取一個設備的時候,先從內存中的buffer中讀或寫數據,而不是直接傳送數據到物理磁碟,這種方式能有效的提高磁碟和CD-ROMS的I/O性能。磁碟和CD-ROMS既可以使用字元設備文件也可使用塊設備文件。
主號和次號:
主號:當在任意目錄使用ls -l 時,結果的第5個欄位就是主號,
設備主號代表了這個設備使用的是哪個設備驅動程序。
次號:次號是一個24位的十六進制數字,
定義了設個設備在系統中的物理的位置。
就拿我們常用的創建卷組來看;
先來看看mknod 命令,如果該設備文件你想放在一個特定的文件夾下當然就先創建文件夾
mknod 設備文件名[/dev/xyz] b/c 主號 次號
{ mkdir /dev/vg01
mknod /dev/vg01/group c 64 0X010000}創建之後,就可以使用你想要創建的設備了,如我現在的卷組的創建命令:
vgcreate /dev/vg01 /dev/dsk/c*t*d*
一直進行下去之後的步驟根據不同的設備而不盡相同
⑨ 看到書上介紹unix操作系統文件類型的設備文件,裡面說把設備文件分為字元設備文件和塊設備文件,這樣
在UNIX系統中抄文件分為四襲種:
1普通文件(ordinary file),
分為: (1) 文本文件
(2) 二進制文件
2 目錄文件(directory)
3 特殊文件(special file),分為:
(1)塊設備文件
(2)字元設備文件
4 符號鏈接文件
(symbolic links)
其中特殊文件也稱設備文件,代表著某種設備,一般放在/dev目錄下,如/dev/cd0表示光碟機。
特殊文件分為塊設備文件和字元設備文件,塊設備文件以區塊為輸入輸出單元,如磁碟;
字元設備文件是以字元作為輸入輸出單元,如串口。符號連接文件包含一指針,這指針會指向文件的所在。
字元設備特殊文件進行I/O操作不經過操作系統的緩沖區,而塊設備特殊文件用來同外設進行定長的包傳輸。字元特殊文件與外設進行I/o操作時每次只傳輸一個字元。而對於塊設備特殊文件來說,它用了cache機制,在外設和內存之間一次可以傳送一整塊數據。
不同的傳輸方式當然可以實現減少時間開銷了!
希望對您有幫助!