




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、凌陽教育嵌入式培訓系統編程部分測試試題注:考試為閉卷,程序題需上機操作運行出結果,考試時間為120分鐘一:選擇題(本題共4小題,每題3分共12分)1)下列不是Linux系統進程類型的是(D)A交互進程B批處理進程C守護進程D就緒進程(進程狀態)2)以下對信號的理解不正確的是(B)A信號是一種異步通信方式B信號只用在用戶空間進程通信,不能和內核空間交互C信號是可以被屏蔽的D信號是通過軟中斷實現的3)進程有三種狀態(C)A準備態、執行態和退出態B精確態、模糊態和隨機態C運行態、就緒態和等待態D手工態、自動態和自由態4)不是進程和程序的區別(B)A程序是一組有序的靜態指令,進程是一次程序的執行過程B
2、程序只能在前臺運行,而進程可以在前臺或后臺運行C程序可以長期保存,進程是暫時的D程序沒有狀態,而進程是有狀態的二:填空題(本題共6小題,2)、3)兩題每空四分,其余每空一分。共23分)1)列舉八種常見的進程間通信方式無名管道、有名管道、消息隊列、信號量、共享內存、信號、套接字網絡上兩個主機的進程間通信方式為套接字2)命名管道比無名管道的優勢提供了一個可以訪問的路徑名,實現沒親緣關系的進程間通信3)消息隊列比命名管道和無名管道的優勢可以按類型實現消息的隨機查詢,沒必要先進先出4)按照邏輯結構不同進行數據庫劃分,Sqlite數據庫屬于哪一類關系型數據庫5)在C語言中操作sqlite數據庫,常用的2
3、中方式是sqlite_exec(回調)、sqlite_gettable(非回調)6)列舉四種進程調度算法先來先調度(FCFS)、短進程優先調度(SPF)、高優先級調度(HPF)、時間片輪轉調度三:問答題(本題共7題,每題5分,共35分)1)什么是系統調用?系統調用是通過什么方式陷入內核態的?請寫出你對系統調用的理解。什么是文件I/O和標準I/O庫?文件I/O和標準I/O庫的區別?系統調用是指操作系統提供給用戶程序調用的一組特殊接口,用戶程序可以通過這組接口獲得操作系統內核提供的服務。系統調用是通過軟件中斷方式陷入內核的linux的文件I/O是由操作系統提供的基本IO服務,標準I/O庫通過封裝系
4、統調用,提供了一個到底層I/O的接口。標準IO默認采用了緩沖機制,還創建了一個包含文件和緩沖區相關數據的數據結構;文件I/O一般沒有采用緩沖模式,需要自己創建緩沖區。一種是標準庫封裝系統調用而成,更高級,一種是系統提供的,比較低級;標準I/O可移植性高、文件I/O可移植性低。什么是進程?用fork()創建一個子進程時,系統會做什么工作進程是具有獨立功能的程序關于某個數據集合上的一次運行活動,是系統進行資源分配的單位,不僅是系統內部獨立運行的實體也是獨立競爭資源的實體。用fork()時系統會分配子進程一個ID號然后繼承父進程的地址空間,包括進程上下文進程堆棧打開的文件描述符等等,他就是父進程的一
5、個復制品。進程和線程有什么區別?每個獨立的進程有一個程序運行的入口、順序執行序列和程序的出口。但是線程不能夠獨立執行,必須依存在進程程中,由進程提供多個線程執行的控制。進程是系統進行資源分配和調度的一個獨立單位.線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源.一個線程可以創建和撤銷另一個線程;同一個進程中的多個線程之間可以并發執行。什么是線程的互斥和同步,程序應怎樣寫才能達到互斥或同步?互斥:是指某一資源同時只允許一個訪問者對其進行
6、訪問,具有唯一性和排它性。但互斥無法限制訪問者對資源的訪問順序,即訪問是無序的。同步:是指在互斥的基礎上(大多數情況),通過其它機制實現訪問者對資源的有序訪問。在大多數情況下,同步已經實現了互斥,特別是所有寫入資源的情況必定是互斥的。少數情況是指可以允許多個訪問者同時訪問資源。在寫程序時可以用互斥鎖和信號量實現線程同步,一個線程訪問共享資源時給這個資源上鎖其他線程就不能訪問了直到上鎖的進程釋放互斥鎖為止。什么是僵尸進程?孤兒進程?守護進程?僵尸進程:僵尸進程是指它的父進程已經退出(父進程沒有等待(調用wait/waitpid)它),而該進程dead之后沒有進程接受,就成為僵尸進程,也就是(zo
7、mbie)進程。孤兒進程:一個父進程退出,而它的一個或多個子進程還在運行,那么那些子進程將成為孤兒進程。孤兒進程將被init進程(進程號為1)所收養,并由init進程對它們完成狀態收集工作。守護進程:是指在UNIX或其他多任務操作系統中在后臺執行的電腦程序,并不會接受電腦用戶的直接操控。此類程序會被以進程的形式初始化。守護進程程序的名稱通常以字母“d”結尾:例如,syslogd就是指管理系統日志的守護進程。通常,守護進程沒有任何存在的父進程(即PPID=1),且在UNIX系統進程層級中直接位于init之下。守護進程程序通常通過如下方法使自己成為守護進程:對一個子進程調用fork,然后使其父進程
8、立即終止,使得這個子進程能在init下運行。這種方法通常被稱為“脫殼”有3個線程:A、B、C,現要求A先執行,然后B再執行,最后C再執行,之后A-B-C循環執行,請說出大體的思路?創建3個信號量sem_A、sem_B、sem_C,分別用來給A、B、C3個線程,啟動sem_A信號量的初始值為1,其余2個信號量初始值為0,當主線程創建3個子線程后,因為sem_A的值大于0,所以只有A線程執行相關的代碼,B、C線程堵塞在對sem_B、sem_C信號量的p操作;當A線程執行完相應的代碼后,給sem_B信號量加1,之后B線程開始執行相關操作,在此時A線程堵塞在對sem_A信號量的p操作,C線程繼續堵塞;
9、當B線程執行完畢相關操作后,給sem_C進行V操作,B線程堵塞,C線程執行相關操作;以上是從A-B-C線程執行的流程.刀exit()、_exit()和return()的區別?exit():結束當前的進程,并且會刷新緩存區,關閉沒有關閉的文件等_exit():結束當前的進程,不對緩存區刷新return:1:在main函數中會結束當前進程2:在子函數中,會返回調用當前函數的調用位置,進程從下個C語句開始執行四:程序題(本小題共3題,每題10分共30分)用多線程、信號量實現生產者和消費者的模擬,倉庫容量為10,倉庫中開始有3件產品,消費者每3秒消費一件產品,生產者每兩秒生產一個產品,生產者和消費者不
10、能同時進入倉庫(需要互斥)/信號量-線程間通信/“生產者消費者”問題#include#include#include#include#include#definemsleep(x)usleep(x*1000)#definePRODUCT_SPEED#defineCONSUM_SPEED#defineINIT_NUM#defineTOTAL_NUMsem_tp_sem,c_sem,sh_sem;intnum=INIT_NUM;voidproduct(void)sleep(PRODUCT_SPEED);intadd_to_lib()num+;倉庫中的產品增加一個msleep(500);return
11、num;voidconsum()sleep(CONSUM_SPEED);intsub_from_lib()10/生產速度/消費速度/倉庫原有產品數/倉庫容量/生產產品/添加產品到倉庫/消費/從倉庫中取出產品num-;/倉庫中的產品數量減一msleep(500);returnnum;/生產者線程void*productor(void*arg)while(1)sem_wait(&p_sem);生產信號量減一product();/生產延時sem_wait(&sh_sem);這個信號量是用來互斥的printf(pushinto!tatol_num=%dn,add_to_lib();sem_post(&
12、sh_sem);sem_post(&c_sem);/消費信號量加一void*consumer(void*arg)/消費者線程while(1)sem_wait(&c_sem);/消費者信號量減一sem_wait(&sh_sem);printf(popout!tatol_num=%dn,sub_from_lib();sem_post(&sh_sem);sem_post(&p_sem);生產者信號量加一consum();消費延時intmain()pthread_ttid1,tid2;sem_init(&p_sem,0,TOTAL_NUM-INIT_NUM);sem_init(&c_sem,0,INI
13、T_NUM);sem_init(&sh_sem,0,1);pthread_create(&tid1,NULL,productor,NULL);pthread_create(&tid2,NULL,consumer,NULL);pthread_join(tid1,NULL);pthread_join(tid2,NULL);return0;編寫一個多線程的程序:要求:創建2個子線程,主進程要傳遞3個參數給線程1,傳遞另一個參數給線程2;線程1、線程2中對每個傳給線程的參數加1,等線程都執行完畢后,進程打印出四個參數的值。傳給線程1參數的值必需要能夠改變,傳給線程2參數的值必需不能改變#include
14、#include#includetypedefstructintA;intB;intC;DATA;/*傳參方法1*/void*thread_1(void*arg)DATA*rec;sleep(1);rec=(DATA*)arg;rec-A+=1;rec-B+=1;rec-C+=1;returnNULL;/*傳參方法2*/void*thread_2(void*arg)intrec=0;sleep(1);rec=(int)(arg);rec+;returnNULL;intmain(intargc,char*argv)pthread_ttid1,tid2;DATAtest;intD=100;test
15、.A=100;test.B=100;test.C=100;/*創建兩個線程*/pthread_create(&tid1,NULL,(void*)thread_1,(void*)(&test);pthread_create(&tid2,NULL,(void*)thread_2,(void*)D);pthread_join(tid1,NULL);pthread_join(tid2,NULL);printf(A=%dn,test.A);printf(B=%dn,test.B);printf(C=%dn,test.C);printf(D=%dn,D);return0;3)編制一段程序,實現進程的管道通
16、信:使用系統調用pipe()建立一條管道線,2個子進程分別向管道各寫一句話:Childprocess1issendingamessage!Childprocess2issendingamessage!而父進程則從管道中讀出來自于2個子進程的信息,顯示在屏幕上。要求:父進程先接收子進程P1發來的消息,然后再接收子進程P2發來的消息。#include#include#include#includeintmain(intargc,char*argv)intfd2;pid_tpid;pid_tpid_sec;charbuf7;pipe(fd);if(pid=fork()0)printf(forkerror!);exit(1);elseif(pid=0)close(fd0);write(fd1,first1,7);close(fd1);exit(0);
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 特許經營合同范本
- 種子繁育員協會活動試題及答案
- 《智能家居用品介紹》課件
- 2024年農作物種子繁育員職業復習試題及答案
- 模具設計的學術研究方向試題及答案
- 種子繁育員技術證書考試試題及答案
- 足球裁判員產業知識試題與答案
- 聚焦模具設計師資格考試的前沿試題及答案
- 《環球電影》課件展示
- 資深經紀人經驗分享會的試題及答案
- 2024年國家公務員考試《行測》真題卷(行政執法)答案和解析
- DB12∕T 947-2020 城市道路交通指引標志設置規范
- 2024年黑龍江省哈爾濱市中考數學試卷(附答案)
- 2024年上海市高考語文真題現代文二《斑鳩》簡析及相關常規題型歸納
- 08J933-1體育場地與設施(一)
- 生豬屠宰獸醫衛生檢驗人員理論考試題庫及答案
- 2024職場人壓力調查報告-智聯招聘-202407
- ISO9001-ISO14001-ISO45001三體系內部審核檢查表
- T-SHZSAQS 00278-2024 智慧農場水肥一體化系統運行技術規程
- 基于STM32的鋰電池管理系統設計與實現
- 新概念2測試題及答案
評論
0/150
提交評論