作業系統的組成、核心的功能、庫、函數、頭檔案、函數名、Linux核心、X86平台系統啟動流程
忘記密碼如何登陸系統
作業系統的組成:kernel + rootfs , kernel + 應用程式
kernel的功能
1、輸出系統調用
2、實作tcp/ip,檔案系統
3、協調硬體工作
4、子產品化裝載驅動,讓硬體工作
kernel完成的功能
程序管理:(建立、排程、銷毀、程序結構體、task struct、tast list、虛拟記憶體空間和位址、實體記憶體空間和位址、常駐記憶體集、虛拟記憶體集、程序間通信IPC機制、核心多任務工作、程序的類型、結構、定義、程序的狀态) 建立程序和銷毀程序系統調用
網絡管理(網絡定義、CSMA/CD、PARC實驗室、網絡拓撲、網橋和交換機隔離沖突産生廣播(MAC表)、MAC、路由器隔離廣播域(路由表)、IP協定、分類、子網路遮罩的作用、ARP協定和攻擊方式?、廣域網和城域網、端口号作用、程序間通信、URL、ISO的OSI模型、如何将主機接入網絡 建立、綁定、監聽socket(多路複用)) 核心中實作tcp/ip協定,通過系統調用輸出
記憶體管理(申請記憶體、釋放記憶體) 通過系統調用完成
檔案系統 (檔案系統中識别一切皆是檔案,按名存取,交換分區,日志型檔案系統和非日志型檔案系統,格式化,VFS,)通過系統調用open() read() write()
安全管理: selinux,權限模型
驅動程式
為什麼會用到rootfs?
linux系統運作需要路徑完成,目錄格式在FHS中定義。不同路徑提供完成不同的功能,/bin,/sbin開機所需的程式,/lib,/lib64開機程式所依賴的庫
作業系統的組成:kernel + 程式(【程式運作時所依賴的】庫+二進制程式)
庫和二進制程式的差別
相同:都是程式
不同:
庫: 沒有執行入口,隻能作為有執行入口程式的片段運作,與運作的程式一塊存活(函數的生命周期)
二進制程式有執行入口
程式開發調用的庫 和 源碼編譯為二進制程式運作時加載至共享記憶體中的庫不相同
程式開發時,調用syscall二次封裝的庫(Glibc庫 gun/libc)及檢視頭檔案
glibc庫的位置: /usr/lib,/usr/lib64,/lib,/lib64
頭檔案:記錄庫的數量和有多少個調用的函數庫,函數名,及可向函數傳遞的參數
庫:函數集合,functions 功能
函數:代碼片段,函數可以接受參數,完成靈活多樣的功能
函數名:友善使用代碼就為其取了一個名字
調用函數:即為調用函數名,完成功能
調用接口:即為功能入口或功能的名字
依據庫被調用執行後是否有執行結果傳回對庫調用進行分類
過程調用:沒有傳回值,procedure
函數調用:有傳回值:function
kernel了解
單核心:所有功能在核心單個程序中以線程實作。穩定,效率高。如果任何一處出故障,全體崩潰。(Linux)
微核心:所有功能獨立成一個子系統。不穩定,效率低。任何處出故障不影響全局,可單子產品修複。(Windows,Solaris)
微核心理論比單核心更為先進,但是微核心多個子系統間的協調過于複雜,是以單核心和微核心設計思想或建構方式不分伯仲。
Linux核心
1、程序輕量,輕量到相當于微核心中線程線程的概念。
2、程序中類似于輕量級程序模式運作程序,程序稱為thread
3、linux線程實作與windows、Solaris不一樣
4、當有人質疑Linux使用單核心時,linus曾說:隻要linux能跑起來,而且沒有什麼嚴重的問題,我們就應該讓它進行下去,畢竟穩定壓倒一切
5、吸收微核心設計:支援子產品化設計:核心中子產品 .ko (kernel object) 程式調用的庫 .so (share object) 子產品相當于程式的庫的概念,隻是子產品隻能被kernel調用。庫隻能被程式調用
6、更多硬體、協定、檔案系統運作
kernel組成
核心檔案: /boot/vmlinuz-VERSION-release
ramdisk: (安裝系統後由,安裝程式生成)
CentOS 5: /boot/initrd-1.2.3-1.OS.CPU.img
CentOS 6+: /boot/initramfs-1.2.3-1.OS.CPU.img
子產品: /lib/modules/1.2.3-1.OS.CPU
CentOS x86平台 啟動流程
加電自檢、Bootsquence(MBR)、MBR工作(系統引導)、Kernel工作、隻讀切換挂載rootfs、啟動init
加電自檢
加電 -- CPU自舉(CPU找到ROM特定位址空間中的特定指令,CPU運作指令,完成硬體自檢)-- 顯示BIOS界面
Bootsquence(MBR)
根據BIOS設定,從上至下依次查找第一個有MBR的裝置或模拟MBR的裝置。
如果儲存設備都沒有MBR,到網絡裝置時:
1、通過網卡發送廣播,找到dhcp伺服器,擷取一個IP位址
2、并通過dhcp獲得能夠傳遞過來一個引導加載程式的檔案伺服器(tftp)
3、傳遞引導程式過來,完成系統引導
MBR工作(系統引導)
引導加載器:MBR=446(bootloader) + 64(fat) + 2 SSAA
作用:顯示菜單,加載核心至記憶體,移交控制權
引導加載器分類:
Windows NT Loader (New Technology)
Linux
LILO Linux Loader 古老,無法加載1024後的柱面,現多用于嵌入式
grub:grand uniform boot 統一引導加載器(Linux,Windows,BSD),突破LILO限制
grub1 CentOS5,6 0系
grub2 CentOS 7 1系
Step1: 找到MBR時,運作MBR進入1
Step1.5:是分區的檔案系統的驅動。 step1.5在MBR後面的一段空間中,1完成後自動運作1.5
Step2:進入分區,運作grub程式,根據配置顯示菜單,根據使用者選擇的核心,和ramdisk,加載至記憶體。移交控制權給核心
Kernel工作
核心自動解壓、展開
1、探測硬體
2、加載驅動(包括從ramdisk中加載驅動)
ramdisk分類
CentOS 5: ramdisk 在記憶體中當作磁盤,當核心挂載根時,需要再一次緩沖ramdisk
CentOS 6,7: ramfs 在記憶體中當作檔案系統,直接挂載
隻讀切換挂載rootfs
啟動init
init分類
CentOS 5 System V init (1、程序切換,2、程序依賴 。 串行啟動程序)
配置檔案:/etc/inittab
CentOS 6 Ubuntu upstart --> init (dbus:程序間通信基于BUS總線。基于dbus機制,沒有依賴。接近并行啟動程序 )
配置檔案: /etc/inittab, /etc/init/*.conf
CentOS 7 MAC/OS systemd (1、不借助bash解釋器 ,systemd能完成初始化[僅啟動需要的程序,不需要的程序,假啟動,在需要通路此程序時,都會啟動])
配置檔案: /etc/systemd/system , /usr/lib/systemd/system
CentOS5,6: service
CentOS 7: systemctl
init程式初始化
1、設定主機名
1
2
3
4
5
6
<code>1</code><code>)CentOS </code><code>5</code><code>: HOSTNAME=`/bin/hostname`</code>
<code>2</code><code>)CentOS </code><code>6</code><code>: HOSTNAME=$(/bin/hostname)</code>
<code># Set the hostname.</code>
<code>update_boot_stage RChostname</code>
<code>action $</code><code>"Setting hostname ${HOSTNAME}: "</code> <code>hostname ${HOSTNAME}</code>
<code>[ -n </code><code>"${NISDOMAIN}"</code> <code>] && domainname ${NISDOMAIN}</code>
2、設定歡迎資訊 baner
<code>1)CentOS 5: </code><code>echo</code> <code>-en $</code><code>"\t\tWelcome to "</code>
<code>2) CentOS 6:</code><code>echo</code> <code>-en $</code><code>"\t\tWelcome to "</code>
3、激活udev和selinux
4、挂載/etc/fstab檔案中定義的檔案系統
<code>action $</code><code>"Mounting local filesystems: "</code> <code>mount -a -t nonfs,nfs4,smbfs,ncpfs,cifs,gfs,gfs2 -O no_netdev</code>
<code>else</code>
<code> </code><code>action $</code><code>"Mounting local filesystems: "</code> <code>mount -a -n -t nfs4,smbfs,ncpfs,cifs,gfs,gfs2 -O no_netdev</code>
<code>fi</code>
5、檢測根檔案系統,并以讀寫挂載檔案系統
<code> </code><code>mount</code> <code>-n -o remount,ro /</code>
6、設定系統時鐘
7、激活swap設定
8、根據/etc/sysctl.conf檔案設定核心參數
9、激活lvm2及software RAID
10、加載額外裝置的驅動
11、清理操作
CentOS 6啟動差別
程式: upstart
配置檔案: /etc/inittab , /etc/init/*.conf
注意: /etc/init/*.conf遵循upstart文法格式
tty.conf 與終端相關
<code>exec /sbin/mingetty $TTY</code>
rc.conf 啟動服務
<code>exec /etc/rc.d/rc $RUNLEVEL</code>
rcS.conf 初始化
<code>exec</code> <code>/etc/rc</code><code>.d</code><code>/rc</code><code>.sysinit</code>
如何跳過開機密碼,進入維護模式
1、啟動系統
<a href="https://s5.51cto.com/wyfs02/M01/03/E2/wKiom1mim3nguOhJAAASWcZY-Pc725.png" target="_blank"></a>
2、在此界面下,按任意鍵。
向上下箭頭:完成上下移動。
e : 在啟動前編輯高亮菜單
a : 在啟動前修改核心參數
c : 列印一個指令行
<a href="https://s5.51cto.com/wyfs02/M00/A2/93/wKioL1mim62jq0scAAAuTKzUPlQ650.png" target="_blank"></a>
3、按e編輯高亮菜單
b 引導起動
e 編輯boot順序所選的指令行
c 列印一個指令行
o 在所選行後,打開一個新行
O 在所選先前,打開一個新行
d 删除,光标所在行
<a href="https://s5.51cto.com/wyfs02/M01/A2/93/wKioL1minIDzcf3nAAA3xPfuiNc611.png" target="_blank"></a>
3、光标移到kernel /vmlinuz行,按e鍵。
類BASH的行編輯器,支援指令行補全(TAB)
ENTER:在編輯完畢後,可以按ENTER鍵,接受你的改變
<a href="https://s4.51cto.com/wyfs02/M00/03/E2/wKiom1minbyQ_yEBAAAmhLsTdsE356.png" target="_blank"></a>
4、在其後可以輸入 1 或 s 或 S 或 single , 并按ENTER鍵,儲存
<a href="https://s1.51cto.com/wyfs02/M01/03/E2/wKiom1minzLj2-KOAAAczpOpHgU210.png" target="_blank"></a>
<a href="https://s1.51cto.com/wyfs02/M02/A2/93/wKioL1minyLinFTFAAANXvcSGyk783.png" target="_blank"></a>
5、按b鍵引導,即可完成元密碼登入bash
6、修改密碼
1)echo "PASSWORD" | passwd -n 2 -x 2 -i 100 root
2)passwd root
3)openssl passwd -salt $(openssl rand -hex 4) -1 和 usermod -p PASSWORD user
本文轉自 lccnx 51CTO部落格,原文連結:http://blog.51cto.com/sonlich/1959597,如需轉載請自行聯系原作者