20191317《信息安全专业导论》第九周学习总结

教材内容总结

CPU调度

CPU调度 (CPU scheduling):多个进程同时处于内存,当一个进程必须等待时,OS从该进程拿走CPU使用权交给其他进程。

进程执行从一个IO区间(I/O burst)开始,随后进入一个CPU区间(CPU burst)并反复,进程循环地在CPU执行和I/O等待两个状态间切换,直到通过系统请求终止最后一个CPU burst。

这张图可以很好的解释CPU调度:

CPU调度决策发生在4种情况下:

  1. 进程从运行(running)状态切换到等待(waiting)状态;
  2. 进程从运行(running)状态切换到就绪(ready)状态;
  3. 进程从等待(waiting)状态切换到就绪(ready)状态;
  4. 进程终止

内存管理

内存管理是指软件运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源。

一个执行中的程式,譬如网页浏览器在个人电脑或是图灵机(Turing machine)里面,为一个行程将资料转换于真实世界及电脑内存之间,然后将资料存于电脑内存内部(在计算机科学,一个程式是一群指令的集合,一个行程是电脑在执行中的程式)。

我还在博客园里找到一些更加详细的资料:https://www.cnblogs.com/huangwentian/p/7487670.html

进程状态

进程状态反映进程执行过程的变化。这些状态随着进程的执行和外界条件的变化而转换。在三态模型中,进程状态分为三个基本状态,即运行态,就绪态,阻塞态。在五态模型中,进程分为新建态、终止态,运行态,就绪态,阻塞态。

文件访问

文件访问有直接访问和顺序访问两种方法。

顺序访问即将文件看做线性结构。这要求按顺序处理文件中的数据。读写操作根据读写的数据量移动当前文件指针。

直接文件访问的文件会被概念性的划分为带编号的逻辑记录。直接访问允许用户指定记录编号,从而把文件指针设置为某个特定的记录。因此,用户可以按照任何顺序读写记录。

磁盘调度

磁盘调度在多道程序设计的计算机系统中,各个进程可能会不断提出不同的对磁盘进行读/写操作的请求。由于有时候这些进程的发送请求的速度比磁盘响应的还要快,因此我们有必要为每个磁盘设备建立一个等待队列,常用的磁盘调度算法有以下四种:

先来先服务算法(FCFS)

最短寻道时间优先算法(SSTF)

扫描算法(SCAN)

问题与解决办法

在做云班课选做作业时,我发现进程状态代码难以理解,我就在简书上找了些资料。然后在其基础之上根据自己的理解做了一些改动。

from state_machine import State, Event, acts_as_state_machine, after, before, InvalidStateTransition

@acts_as_state_machine
class Process:
    created = State(initial=True)
    ready = State()
    running = State()
    waiting = State()
    terminated = State()

    read = Event(from_states=(created,waiting ,running),to_state = ready)
    run = Event(from_states=ready,to_state = running)
    terminate = Event(from_states=running,to_state = terminated)
    wait = Event(from_states=running,to_state = waiting)

    def __init__(self, name):
        self.name = name

    @after('wait')
    def wait_info(self):
        print('{}entering waiting mode'.format(self.name))

    @before('terminate')
    def terminate_info(self):
        print('{}terminated'.format(self.name))    

    @after('run')
    def run_info(self):
        print('{}is running'.format(self.name))

    @after('read')
    def read_ingo(self):
        print('{}is ready'.format(self.name))    

def transition(process,event,event_name):
    try:
        event()
    except InvalidStateTransition as err:
        print('Error: transition of {} from {} to {} failed'.format(process.name, process.current_state, event_name))


def state_info(process):
    print('state of {}: {}'.format(process.name, process.current_state))        

def main():
    READY = 'ready'
    RUNNING = 'running'
    WAITING = 'waiting'
    TERMINATED = 'terminated'

    p1, p2 = Process('process1'), Process('process2')
    [state_info(p) for p in (p1, p2)]

    print()
    transition(p1, p1.wait, WAITING)
    transition(p2, p2.terminate, TERMINATED)
    [state_info(p) for p in (p1, p2)]
    
    print()
    transition(p1, p1.run, RUNNING)
    transition(p2, p2.wait, WAITING)
    [state_info(p) for p in (p1, p2)]

    print()
    transition(p2, p2.run, RUNNING)
    [state_info(p) for p in (p1, p2)]

    print()
    [transition(p,p.read, READY) for p in (p1,p2)] 
    [state_info(p) for p in (p1, p2)]


    print()
    [transition(p, p.terminate, TERMINATED) for p in (p1, p2)]
    [state_info(p) for p in (p1, p2)]

if __name__ == '__main__':
    main()    

虽然这些代码可以看懂,但是真让我自己写的话还是做不到的。这里面还有许多我没接触过的知识
资料
Python设计模式之状态模式

posted @ 2019-11-30 20:29  Bzrael  阅读(130)  评论(0编辑  收藏  举报