第四模塊練習
阿新 • • 發佈:2018-03-29
以及 占用 控制線 recv 異步io 信號 方式 == 長度
1、簡述計算機操作系統中的“中斷”作用?
中斷裝置由一些特定的寄存器和控制線路組成,中央處理器和外圍設備等識別到的事件保存在特定的寄存器中。
中央處理器每執行完一條指令,均由中斷裝置判別是否有事件發生。
若無事件發生,CPU繼續執行;
若有事件發生,則中斷裝置中斷原占有CPU的程序的執行,讓操作系統的處理事件服務程序占用CPU,對出現的事件進行處理,事件處理完後,再讓原來的程序繼續占用CPU執行
2、簡述計算機內存中的“內核態”和“用戶態”
操作系統的核心是內核,獨立於普通的應用程序,內核可以訪問受保護的內存空間,也可以訪問底層硬件設備的所有權限。為了保證用戶進程不能直接操作內核,保證內核的安全,操作系統將虛擬空間劃分為兩部分,一部分是內核空間,一部分是用戶空間。
3、進程間通信方式有哪些?
1、管道
2、有名管道(FIFO)
3、消息隊列
4、信號量
5、共享內存
6、套接字(socket)
4、簡述你對管道、隊列的理解;
管道通常指無名管道
1、它是半雙工的(即數據只能在一個方向上流動),具有固定的讀端和寫端
2、它只能用於具有親緣關系的進程中通信(也就是父與子進程或者兄弟進程之間)
3、數據不可反復讀取了,即讀了之後歡喜紅區中就沒有了
消息隊列
1、消息隊列是面向記錄的,其中的消息具有特定的格式以及特定的優先級
2、消息隊列獨立於發送與接收進程。進程終止時,消息隊列及其內容不會被刪除。
3、消息隊列可以實現消息隨機查詢。
5、什麽是同步I/O,什麽是異步I/O?
同步和異步關註的消息通信機制
同步io
用戶態向內核態發出一個調用,在沒有得到結果之前,該調用返回,一旦返回就有返回值。
換句話說,就是調用者主動等待這個調用的結果
異步io
用戶態向內核態發出調用,這個調用立即返回,所以沒有返回結果。
換句話說,調用者發出調用後,不會立即得到結果,被調用者通過狀態、通知或者回調函數處理這個調用。
6、寫一個程序,包含十個線程,同時只能有五個子線程並行執行;
import threading from threading import Semaphore import time def task(sm, i): sm.acquire() time.sleep(1) print(i) sm.release() if __name__ == ‘__main__‘: sm = Semaphore(5) for i in range(9): t = threading.Thread(target=task, args=(sm, i )) t.start()
7、寫一個程序,要求用戶輸入用戶名和密碼,要求密碼長度不少於6個字符,且必須以字母開頭,如果密碼合法,則將該密碼使用md5算法加密後的十六進制概要值存入名為password.txt的文件,超過三次不合法則退出程序;
import hashlib
import re
import json
count = 0
hash = hashlib.md5()
while count < 3:
user = input("user>>").strip()
pwd = input("pwd>>").strip()
print()
if len(pwd) >= 6 and re.search(‘\A[a-zA-Z]‘, pwd):
pwd_md5 = hash.hexdigest()
with open(‘password.txt‘, ‘w‘) as f:
data = {user: pwd_md5}
f.write(json.dumps(data))
print("保存成功")
break
else:
count += 1
print("密碼不合法")
8、寫一個程序,使用socketserver模塊,實現一個支持同時處理多個客戶端請求的服務器,要求每次啟動一個新線程處理客戶端請求;
import socketserver
import threading
class MyServer(socketserver.BaseRequestHandler):
def handle(self):
while True:
self.data = self.request.recv(1024).decode()
print(self.data)
self.request.send(self.data.upper().encode())
if __name__ == ‘__main__‘:
server = socketserver.ThreadingTCPServer((‘127.0.0.1‘, 9999), MyServer)
t = threading.Thread(target=server.serve_forever)
t.start()
第四模塊練習