码迷,mamicode.com
首页 > 其他好文 > 详细

第四模块练习

时间:2018-03-29 02:18:52      阅读:316      评论:0      收藏:0      [点我收藏+]

标签:所有权   内核空间   json   指令   核心   信号量   hand   机制   进程间通信   

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()

第四模块练习

标签:所有权   内核空间   json   指令   核心   信号量   hand   机制   进程间通信   

原文地址:https://www.cnblogs.com/Jason-lin/p/8667324.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!