zoukankan      html  css  js  c++  java
  • 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设计模式之状态模式

  • 相关阅读:
    Syn Bot /OSCOVA 基础教程(2)
    Syn Bot /OSCOVA 介绍(1)
    如何访问阿里云内网数据库
    Winform项目中的Settings.settings与App.config
    WinForm项目开发傻瓜教程
    C++读取BMP文件
    boost异步tcp通信技术练习
    lex/flex 学习笔记 一
    流数据解析中高位地址转换的性能分析
    bash随笔
  • 原文地址:https://www.cnblogs.com/wpy-1049363419/p/11924209.html
Copyright © 2011-2022 走看看