1. 程式人生 > >應用開發第三天程序控制(國嵌筆記)

應用開發第三天程序控制(國嵌筆記)

1.程序控制理論基礎
1.程序是一個具有一定獨立功能的程式的一次執行活動
程序和程式的區別:程式在執行時就是程序了。程式是靜態的(在磁碟上儲存著),
 特點:動態性,併發性,獨立性,非同步性
狀態轉換圖:三態

就緒,阻塞,執行


程序ID:PID,PPID,UID(啟動程序的使用者ID)
程序互斥:
當有若干程序都需要使用某一共享資源時,任何時刻最多允許一個程序使用,其他要使用該資源的程序必須等待,直到佔用該資源者釋放了該資源為止。
臨界資源:
作業系統中將一次值允許一個程序訪問的資源稱為臨界資源
臨界區:
程序中訪問臨界資源的那段程式程式碼稱為臨界區。為實現對臨界資源的互斥訪問,應保證諸程序互斥地進入各自的臨界區 
程序同步:
一組併發程序按一定的順序執行的過程稱為程序間的同步。具有同步關係的一組併發程序稱為合作程序。合作程序間相互發送的訊號稱為訊息或事件
程序排程:
按照一定演算法,從一組待執行的程序中選出一個來佔有CPU執行。
排程方式:
搶佔式,非搶佔式
排程演算法:
先來先服務排程演算法
短程序優先排程演算法
高優先順序優先排程演算法
時間片輪轉法
死鎖:
多個程序因競爭資源而形成一種僵局,若無外力作用,這些程序都將永遠不能再向前推進

2.程序控制程式設計
1.獲取ID
#include<sys/types.h>
#include<unistd.h>

pid_t getpid(void); //獲取本程序ID
pid_t getppid(void); //獲取父程序ID
2.建立程序 
1.fork
#include<unistd.h>
pid_t fork(void);//建立子程序
被呼叫一次卻返回兩次:
1.父程序中,返回子程序的PID
2.子程序中返回0
3.出現錯誤返回一個負值
會將fork之後的程式碼複製(此處複製非實際複製而是一個抽象意義上的複製->共享)一份開始執行,就是fork之後有兩段相同的程式碼(程式碼段)執行。fork之後的程式碼子程序執行一次,父程序執行一次。但是是共享的程式碼段的程式碼
資料部分(資料段、棧等)拷貝一份。資料獨立,程式碼共享
2.vfork
#include <sys/typrs.h>
#include <unistd.h>
pid_t vfork(void); //建立子程序

fork PK vfork
1.fork:子程序拷貝父程序的資料段
 vfork:子程序共享父程序的資料段
2.fork:父子程序的執行次序不確定
 vfork:子程序先執行,父程序後執行


vfork子程序執行完後才執行父程序。vfork函式產生的父子程序必定是子程序先執行完,父程序才會開始執行
3.exec函式族
1.exec用被執行的程式替換呼叫它的程式(不會產生新的程序)
區別:
fork建立一個新的程序,產生一個新的PID
exec啟動一個新程式,替換原有的程序,因此程序的PID不會改變
2.常見的exec函式
1.execl(path,arg1,...); path 被執行程式名(含有完整路徑),arg1-argn 被執行程式所需的命令列引數,含程式名,以空指標(NULL)結束
  eg:execl("/bin/ls","ls","-al","/etc/passwd",(char *)0);
2.execlp(path,arg1-argn); path被執行的程式名(不含路徑,將從path環境變數中查詢該程式),arg1-argn 同上
`3.execv(path argv[]);path 被執行的程式(含完整路徑),argv被執行程式所需的命令列引數陣列
4.int system(const char* string)
呼叫fork產生子程序,由子程序來呼叫/bin/sh -c string 來執行引數string所代表的命令
eg:system("ls -al /etc/passed");
exec函式族會在一個程序中啟動另一個程式執行。並用他來取代呼叫程序的資料段、程式碼段、和錐棧段。在執行完exec函式呼叫後,原呼叫程序的內容除了程序號外,其他全部被新的程序替換了。
4.程序等待
#include<sys/types.h>
#include<sys/wait.h>

pid_t wait(int* status);
   阻塞該程序,直到其中某個子程序退出
waitpid()    

//使父程序阻塞,等待子程序退出,來確保子程序先結束。




if(pc==0)
{···}
else{
pr=wait(NULL);
···
}
都是子程序先執行父程序再執行

相關推薦

應用開發程序控制筆記

1.程序控制理論基礎1.程序是一個具有一定獨立功能的程式的一次執行活動程序和程式的區別:程式在執行時就是程序了。程式是靜態的(在磁碟上儲存著), 特點:動態性,併發性,獨立性,非同步性狀態轉換圖:三態就緒,阻塞,執行 程序ID:PID,PPID,UID(啟動程序的使用者I

視訊學習-程序控制

程序ID(PID):標示程序的唯一數字 父程序的ID(PPID) 啟動程序的使用者ID(UID) 程序互斥 程序互斥是指當有若干程序都要使用某一共享資源時,任何時刻最多允許一個程序使用,其他藥使用該資源的程序必須等待,直到佔用該資源者釋放了該資源為止。 臨界資源 作業系

[Android] 開發

管理程序 系統日誌 全局 audio idt 轉存 restart pow ges 簡單的電話撥號程序 先在 AndroidManifest.xml 中加入申請權限代碼: <?xml version="1.0" encoding="utf-8"?> <m

移動web開發———

web開發 固定寬度 edi 嵌套 查詢 代碼 none 原理 全部 一、響應式開發1、響應式布局, 就是一個網站能夠兼容多個終端。 2、響應式開發的原理CSS3中的Media Query(媒介查詢,and之後一定要加空格@media screen and (min-

樂優商場開發筆記

0.學習目標 會配置Hystix熔斷 會使用Feign進行遠端呼叫 能獨立搭建Zuul閘道器 能編寫Zuul的攔截器   1.Hystrix 1.1.簡介 Hystix,即熔斷器。 主頁:https://github.co

安卓---ViewPager控制元件實現滑動切換圖片

先不說那麼多,給個圖片表示成功! 這是兩張圖片切換時截的圖,不是錯誤喲! 首先上佈局程式碼: mian_activity.xml佈局檔案(csdn的xml檔案顯示有問題“<”符號,在不顯示的地方我就用“《"代替了,請諒解) <?xml version="1.0" encod

福州——資料結構

    第三天了,我們學了程式設計的最基礎之一——資料結構。一個程式由兩部分組成(引用山楂猹老師的話),其中有一部分就是難懂的演算法,另一種就是噁心的資料結構。所以說,資料結構也是OI中非常重要的一塊。我們平常所學的,大多數都是演算法。當然,演算法是我們一生都要學習的,所謂

章 控件6~7課

pan 獨立 兩種 color 代碼 父窗口 及其 所有 外觀 第6課:創建和使用控件 第7課:常用控件 概述: 在MFC中,控件是具有獨立功能的人機交互的小窗口,它們除了可以使用自身成員外,還可使用其基類CWnd類的公有成員,因為幾乎所有的控件類都是從CWnd類派生而

《Spring Security3》四章部分翻譯下密碼加salt

文件 auth ans 大小 ack 工程師 新的 bool get 你是否願意在密碼上添加點salt? 如果安全審計人員檢查數據庫中編碼過的密碼,在網站安全方面,他可能還會找到一些令其感到擔心的地方。讓我們查看一下存儲的admin和guest用戶的用戶名和密碼值

章 寄存器內存訪問

push 來安 直接 分享圖片 info cpu 防止 修改 mov指令 一、一個字=兩個字節。地位字節存放在低地址單位中,高位字節存放在高地址單元中,取低地址內存單元作為字數據地址。(小端法) 引入概念:字單元:存放一個字型數據的內存單元,由兩個地址連

章 寄存器內存訪問相關內容總結

管理 讀寫 理解 元組 實驗 記錄 需要 默認 內部 在本章中,我們從訪問內存的角度繼續學習了幾個寄存器。我們提出字單元的概念:字單元,即存放一個字型數據(16位)的內存單元,由兩個地址連續的內存單元組成。高地址內存單元中存放字型數據的高位字節,低地址內存單元中

次:jQuery Ajax三級聯動

1. jackson    Jackson是一個簡單基於Java應用庫,Jackson可以輕鬆的將Java物件轉換成json物件和xml文件,同樣也可以將json、xml轉換成Java物件 核心程式碼:    ObjectMapper mapper = new Object

LeetCode刷題記錄——十五題搜尋插入位置

題目描述 給定一個排序陣列和一個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。 你可以假設陣列中無重複元素。 示例 1: 輸入: [1,3,5,6], 5 輸出: 2 示例 2: 輸入: [1,

42的交易2013-5-21+1001090.3

總金額:8281.28(上一交易日總金額:7190.98) 個人盈利總額:     黃金:-2795.14 + 1090.3 = -1704.84 連續完成目標天數:1 完成目標總天數:13 未完成目標總天數:29

基於cesuim框架開發接入線上地圖服務特別全的

1、首先理解線上天地圖服務的兩種座標系; (1)經緯度座標; (2)墨卡託投影座標; 2、其實經緯度座標與墨卡託投影座標的差別,你只需記住經緯度座標是球面座標,墨卡託投影座標是平面座標; 3、還需要注意:Cesium大多是預設Provider是按照墨卡託投影的,所以你要用經緯度的天地

java SSM章學習內容動態SQL語句

一. if判斷語句 用法:可以在SQL語句下加if標籤用於判斷 xml <!-- if判斷 -->       <select id="selectif" resultMap="BillProviderResult">           SELECT

java SSM章學習內容oracle儲存過程

儲存過程 edit進入文字編輯器中 /指定語句 DBMS_OUTPUT.PUT_LINE('操作完畢'||a);輸出一段話 commit;提交 set serverout on   列印一段話之前要先設定基本型別 declare      //設定變數,直接賦值可以:=9

JavaWeb 實現一個Filter過濾器程式教材學習筆記

Filter被稱作過濾器,其基本功能就是對Servlet容器呼叫Servlet的過程進行攔截,從而實現一些特殊功能, Filter介面包含了三個方法 init()方法主要就是用來初始化過濾器,只會在web程式載入的時候呼叫一次 doFilter()方法是響應客戶端請求的,只要有請求就

c語言學習之選擇結構程序設計

c語言 選擇結構為了增加理解,寫的幾個小程序1:判斷三角形的成立以及輸出最大邊 練習前三種語句#include <stdio.h> int main() { int a,b,c; printf("請輸入三角形三邊長(邊為整數,不能輸入負數):"); scanf("%d%d%d", &a ,