[TOC]
# UNIX/Linux系統結構
UNIX/Linux 系統可以分為4個主要部分:內核、shell、文件系統和應用程序。
內核、shell 和文件系統一起形成了基本的操作系統結構,它們使得用戶可以運行程序、管理文件并使用系統。部分層次結構如圖:

## 1) 內核層
內核層是 UNIX/Linux 系統的核心和基礎,它直接附著在硬件平臺之上,控制和管理系統內各種資源(硬件資源和軟件資源),有效地組織進程的運行,從而擴展硬件的功能,提高資源的利用效率,為用戶提供方便、高效、安全、可靠的應用環境。
## 2) Shell層
Shell 層是與用戶直接交互的界面。用戶可以在提示符下輸入命令行,由 Shell 解釋執行并輸出相應結果或者有關信息,所以我們也把 Shell 稱作命令解釋器,利用系統提供的豐富命令可以快捷而簡便地完成許多工作。
## 3) 應用層
應用層提供基于 X Window 協議的圖形環境。X Window 協議定義了一個系統所必須具備的功能(就如同 TCP/IP 是一個協議,定義軟件所應具備的功能),任何系統能滿足此協議及符合 X 協會其他的規范,便可稱為 X Window。
> [Linux系統結構詳解](https://blog.csdn.net/Maushawkin/article/details/105914166)
> [Linux系統結構 詳解](https://blog.csdn.net/weixin_30247159/article/details/96401070)
# Linux 內核(Kernel)
內核是操作系統的核心,具有很多最基本功能,它負責管理系統的進程、[內存](http://product.yesky.com/catalog/219/)、設備[驅動](http://drivers.yesky.com/)程序、文件和[網絡](http://product.yesky.com/net/)系統,決定著系統的性能和穩定性。
內核由如下幾部分組成:內存管理、進程管理、設備驅動程序、文件系統和網絡管理等。如圖:

# 用戶態和內核態
應用程序是無法直接訪問硬件資源的,需要通過**通過內核**SCI 層提供的接口來訪問硬件資源。

## SCI(System call interface) 系統調用接口層
SCI 層提供了某些機制執行從用戶空間到內核的函數調用。正如前面討論的一樣,這個接口依賴于體系結構,甚至在相同的處理器家族內也是如此。SCI 實際上是一個非常有用的函數調用多路復用和多路分解服務。
* 在 `./linux/kernel` 中您可以找到 SCI 的實現。
* 在 `./linux/arch` 中找到依賴于體系結構的部分。
## API(POSIX)、C庫函數、系統調用
* 一般而言,應用程序使用API而不是直接使用系統調用來編程
* 進程UNIX/Linux的C庫遵循POSIX規范,以庫函數的形式實現了POSIX API(在API中使用系統調用完成相應功能)。
* 參考:`/usr/include/asm/unistd.h`

> POSIX:Portable Operating System Interface ---> 可移植操作系統接口
> [Linux系統結構詳解](https://blog.csdn.net/hguisu/article/details/6122513)
# X Window System
## 簡介
linux 圖形界面又稱 **X window system**,實際上 linux 本身是沒有界面了(它原本就是個內核,怎么會需要圖形界面呢!)。
Linux 現在的圖形界面的實現只是linux 下的應用程序實現的:
圖形界面并不是 linux 的一部分,linux 只是一個基于命令行的操作系統,linux 和 Xfree 的關系就相當于當年的 DOS 和WINDOWS 3.0 一樣,windows 3.0 不是獨立的操作系統,它只是 DOS 的擴充,是 DOS 下的應用程序級別的系統,不是獨立的操作系統。
同樣 XFree 只是 linux下的一個應用程序而已,不是系統的一部分,但是 X 的存在可以方便用戶使用電腦。WINDOWS 95 及以后的版本就不一樣了,他們的圖形界面是操作系統的一部分,圖形界面在系統內核中就實現了,沒有了圖形界面 windows 就不成為 windows 了。
沒有圖形界面 linux 還是 linux,很多裝 linux 的 Web 服務器就根本不安裝圖形界面。這也 WINDOWS 和 linux 的重要區別之一。
大多數的 UNIX 系統上(包括 Solaris、HP-UX、AIX 等)都可以運行 CDE (Common Desktop Environment,通用桌面環境,是運行于 UNIX 的商業桌面環境)用戶界面;
而在 Linux 上廣泛應用的有 GNOME(GNU Network Object Environment)(見下圖)、KDE 等。

## X 是協議,不是具體的某個軟件
蘋果電腦的圖形界面用的也是X協議,而且被認為是做的最好的X協議圖形界面,并且它對X協議的實施是做在系統內核里的,所以性能明顯好很多,這就是為什么很多大型三維圖形設計軟件都是在蘋果平臺上的原因。
既然是協議,那么肯定和平臺無關的,因此可以讓X應用程序顯示在任何裝 有X server 的遠程計算機上。甚至顯示在裝有 Xnest 服務器的 windows系統上。只不過在大多數情況下,X應用程序都用本機的X server,然后X server將顯示結果輸出到本機的顯示器。這也是很多人不理解X是一種協議的原因。
> [linux下的X server和linux圖形界面原理--perfect](https://blog.csdn.net/Shb_derek/article/details/37966289)
## 組成部分
主要包含如下幾個部分:
1. X server 主要提供基本的顯示接口共 X client 使用,并將用戶的操作等也反映給 X client,是 X client 與硬件的一個中間層。
2. 顯示管理器(Display Manager) 例如(gdm kdm xdm等)
3. 窗口管理器(Window Manager) 例如(metacity,fluxbox等)
4. DM 和 WM之上的一些圖形應用程序
在使用中一般都是b,c,d三者集合起來構成一個完整的集成工作環境,例如KDE、GNOME等,這就是我們平時所說的廣義上的 X client。
> [xserver相關知識匯總](https://blog.csdn.net/arag2009/article/details/78465854)
> [??????linux圖形界面基本知識(X、X11、Xfree86、Xorg、GNOME、KDE之間的關系)](https://www.cnblogs.com/xj626852095/p/3648212.html)
> [XWindow、Server、Client和QT、GTK之間的關系](https://www.jianshu.com/p/017ced3e8ae5)
[第二十四章、 X Window 配置介紹](http://blog.csdn.net/mybluetiankong/article/details/20439241)
[Linux入門學習教程:X Window究竟是什么](http://www.linuxidc.com/Linux/2015-02/114175.htm)
# 參考
> [很好的linux課件](https://www.wendangwang.com/doc/d3e1269242423217c4357f00/23)
> [1.3 系統調用與庫函數](https://www.cnblogs.com/DengSchoo/p/12624459.html)