Linux考試范圍

特別聲明

簡答和編程

寫出20條命令

ls mv cp mkdir touch cd pwd chmod kill help rm cat echo bash more less find tar gcc su

寫出shell腳本的執(zhí)行方法

  • source demo.sh
  • bash demo.sh
  • ./demo.sh

說明Linux程序的執(zhí)行時(shí)間包括哪些部分

  • 用戶態(tài)
  • 內(nèi)核態(tài)
  • 睡眠

shell腳本

  • 寫一個(gè)腳本計(jì)算整數(shù)1至1000的和
#!/bin/bash
sum=0
for i in {1..1000}
do
    sum=$[$i+$sum]
done
echo $sum
  • 寫一個(gè)腳本計(jì)算整數(shù)1至1000的乘積
#!/bin/bash
var=1
for i in {1..1000}
do
 var=$[$var*$i]
done
echo $var

linux自帶的庫函數(shù)有哪些類型

  • 輸入輸出
  • 數(shù)學(xué)運(yùn)算
  • 字符串處理
  • 時(shí)間日期
  • 內(nèi)存分配
  • 多線程并發(fā)

列出linux操作系統(tǒng)中文件的類型

  • 常規(guī)文件
  • 目錄文件
  • 字符設(shè)備文件
  • 塊設(shè)備文件
  • 管道文件
  • 符號鏈接文件
  • 套接字文件

寫出linux系統(tǒng)向進(jìn)程發(fā)送信號的幾種機(jī)制

  • 用/bin/kill發(fā)送信號
  • 從鍵盤發(fā)送信號
  • 用kill和raise函數(shù)發(fā)送信號
  • 用alarm函數(shù)發(fā)送信號

簡述應(yīng)用程序編程接口

列出與文件I/O操作相關(guān)的應(yīng)用編程接口

  • open (文件打開函數(shù))

要求內(nèi)核打開相應(yīng)的文件、宣告想要訪問I/O設(shè)備或文件

  • lseek(改變文件位置函數(shù))

可以改變當(dāng)前文件的讀寫位置

  • read/write(文件讀寫函數(shù))

向文件讀或?qū)憯?shù)據(jù)

  • close(文件關(guān)閉函數(shù))

通知內(nèi)核關(guān)閉文件

列出進(jìn)程間通信的應(yīng)用編程接口

  • mkfifo

創(chuàng)建管道的命令

  • pipe

創(chuàng)建管道

  • msgget

創(chuàng)建和訪問消息隊(duì)列

  • msgsnd

把消息添加到消息隊(duì)列中

  • msgrcv

從消息隊(duì)列中獲取信息

  • msgctl

消息隊(duì)列控制函數(shù)

  • shmget

創(chuàng)建共享內(nèi)存

  • shmat

訪問共享內(nèi)存

  • shmdt

將共享內(nèi)存從當(dāng)前進(jìn)程中分離

  • shmctl

共享內(nèi)存控制函數(shù)

  • semget

創(chuàng)建信號量

  • semop

增加或價(jià)紹信號量

  • semctl

信號量控制函數(shù)

論述

  • 論述linux內(nèi)核用哪三個(gè)相關(guān)的數(shù)據(jù)結(jié)構(gòu)來表示打開的文件

v-node表、文件表、描述符表。v-node表:linux將打開文件的屬性信息保存在v-node中,所有v-node構(gòu)成v-node表。文件表:linux將打開文件信息存儲在文件對象中,所有文件對象構(gòu)成文件表。描述符表:存儲文件描述符,用于定位文件的位置。

  • 論述在linux多線程程序中有哪些變量類型、被映射到哪段地址空間、有幾個(gè)運(yùn)行實(shí)例

全局變量、本地自動(dòng)變量、本地靜態(tài)變量。全局變量:被映射到進(jìn)程虛擬存儲器的可讀寫數(shù)據(jù)區(qū)域,僅有一個(gè)運(yùn)行實(shí)例。本地自動(dòng)變量:函數(shù)未調(diào)用時(shí)不分配內(nèi)存,調(diào)用時(shí)被映射到線程堆棧中,可以擁有一個(gè)至多個(gè)運(yùn)行實(shí)例。本地靜態(tài)變量:被映射到虛擬存儲器的可讀寫區(qū)域,僅有一個(gè)運(yùn)行實(shí)例。

畫圖描述及分析

  • 畫圖說明linux進(jìn)程虛擬地址空間結(jié)構(gòu)

    20191212173504327.png

  • 畫出linux進(jìn)程、linux內(nèi)核與系統(tǒng)調(diào)用間關(guān)系圖

    20191212113805900.png

  • 畫圖說明當(dāng)一個(gè)新的程序開始時(shí)用戶棧的典型組織結(jié)構(gòu)

    2019121216474793.png

分析進(jìn)程家族關(guān)系

  • 說明使用fork系統(tǒng)調(diào)用創(chuàng)建進(jìn)程的過程
  • 系統(tǒng)創(chuàng)建子進(jìn)程PCB,內(nèi)容復(fù)制于父進(jìn)程PCB,新分配PID
  • 創(chuàng)建父進(jìn)程數(shù)據(jù)集的一個(gè)副本,保存于新分配的存儲器中,作為子進(jìn)程數(shù)據(jù)集
  • 假設(shè)下面程序運(yùn)行時(shí)子進(jìn)程的pid是3000,父進(jìn)程的pid是2999.請寫程序運(yùn)行結(jié)果,并畫圖說明父子進(jìn)程運(yùn)行時(shí)用戶地址空間變化情況
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<stdlib.h>
int glob=10;
int main(void){ 
 int local;
 pid_t pid;
 local=8;
 if((pid=fork())==0){ 
  sleep(4);
 }
 else{ 
  glob++;
  local--;
  sleep(10);
 }
 printf("pid=%d,glob=%d,local=%d\n",getpid(),glob,local);
 exit(0);
}
  • 結(jié)果
    pid=3000,glob=10,local=8 //子進(jìn)程
    pid=2999,glob=11,local=7 //父進(jìn)程
  • 說明圖
    進(jìn)程.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容