zoukankan      html  css  js  c++  java
  • 操作系统与进程基础知识

    一、操作系统基础知识
    (一)操作系统背景知识:1946年第一台计算机
    1.手工操作 —— 穿孔卡片
     用户独占,不用等待,资源利用率低,cpu利用不充分
    2.批处理:---串行
    联机批处理,作业的输入/输出由CPU来处理,读磁带速度快,不足CPU利用率低
    脱机批处理,输入/输出脱离主机控制,由卫星机控制,读磁带和cpu共同工作,节省了等待时间,不足是
    遇到I/O时候,cpu等待时间浪费资源
    3.多道程序系统:---并行***
    是同一时间允许多个程序并行,当一个道的程序遇到 I/O操作等待的时候,
    cpu立马转向另一道运行,节省了等待时间
    实质上多道的转换也是需要时间的,所以多道程序其实是降低了CPU的效率,但是达到多个程序同时运行效果
    #***标志着操作系统的渐趋成熟,出现了文件系统管理,作业调度管理,存储器管理,外部设备管理 #***出现空间隔离概念,内存互相隔离,让数据更安全 #***出现时空复用概念,遇到IO操作就切换程序,cpu效率提高
    分时间片工作,按时间片轮流把处理机分配给各联机作业使用
    但是其实并没有提高效率,因为自己的时间片没有走完,可能就被轮走了,时间片轮转也是耗费时间的
    分时系统
    实时系统,实时控制和信息处理,独享资源,一般用于飞机飞行、导弹发射;预定飞机票、查询有关航班、航线、票价等
    实时系统
    4.通用操作系统:
    具有多种类型操作特征的操作系统。可以同时兼有多道批处理、分时、实时处理的功能,或其中两种以上的功能。
    UNIX操作系统:通用的多用户分时交互型的操作系统
    (二)操作系统的进一步发展
    """
    1.个人计算机操作系统:专供个人使用
    2.网络操作系统:增加了个人操作系统中按照网络协议增添了网络管理模块
    3.分布式操作系统:统一的操作系统实现统一操作,分布式系统更强调分布式计算和处理,因此对于多机合作和系统重构、坚强性和容错能力有更高的要求,希望系统有:更短的响应时间、高吞吐量和高可靠性。
    """
    (三)操作系统的功能
    """
    操作系统就是一个协调、管理和控制计算机硬件资源和软件资源的控制程序,
    程序员直接跳过繁琐的硬件操作,通过应用软件直接使用操作系统提供的功能来间接使用硬件。
    """
    # 二、进程---正在运行的一个程序的抽象
    """
    必备的理论基础:首先是操作系统提供良好的借口,让竞争变的有序,其次是多道技术,时空的复用,空间的隔离。
    强调:遇到I/O 切,遇到cpu占用过多的也切,核心能够把切走的进程保存,下次切到了继续从之前的位置运行
    """
    (一)概念:
    """
    进程是资源分配和调度的最小单元,进程是一个实体,动态产生和消亡,它是程序的容器,是执行中的程序,程序是永久的,进程是暂时。多道程序设计操作系统都建立在进程的基础上
    """
    (二)特点:
    """
    动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。
    并发性:任何进程都可以同其他进程一起并发执行
    独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;
    异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进
    结构特征:进程由程序、数据和进程控制块三部分组成。
    多个不同的进程可以包含相同的程序:一个程序在不同的数据集里就构成不同的进程,能得到不同的结果;但是执行过程中,程序不能发生改变。
    """
    (三)进程调度算法:
    """
    先到先服务算法:
    短作业优先算法:对短作业或短进程优先调度的算法
    时间片轮转法:让每个进程在就绪队列中的等待时间与享受服务的时间成比例
    多级反馈法:目前公认最好的算法:
    (1) 应设置多个就绪队列,并为各个队列赋予不同的优先级
    (2) 当一个新进程进入内存后,首先将它放入第一队列的末尾,按FCFS原则排队等待调度
    (3) 仅当第一队列空闲时,调度程序才调度第二队列中的进程运行
    """
    进程的状态:就绪,执行,阻塞(recv  sleep input 等    )
    (四)、进程的并行与并发
    """
    并行:多核且资源够用状态下,同时执行
    并发 : 并发是指资源有限的情况下,两者交替轮流使用资源
    区别:并行是不同的程序真正的同时运行;并发是看似同时执行,其实只是在一段时间内轮流执行,看似同时执行
    """
    三、同步异步
    """
    同步:两个任务相互依赖,状态可以保持一致。
    异步:两个任务,不依赖任务完成,只是通知有这个任务,至于执行与否不关心
    # 举例:
    去银行排队办理业务
    同步是一心一意排队等待
    异步是领取一个号码,就不管了,到了会有柜员喊号办理业务
    """
    四、阻塞与非阻塞:阻塞与非阻塞主要是程序(线程)等待消息通知时的状态角度来说的
    (1)进程的创建与结束
    """
    四种方式:
    1.初始化进程
    2,进程中开启另一个进程
    3.用户的交互式请求,而创建一个新进程(如用户双击暴风影音)
    4.一个批处理作业的初始化(只在大型机的批处理系统中应用)
    """

     简单进程的创建

    multiprocess中process模块创建进程(综合的 处理进程 的包)
    import os
    from  multiprocessing import Process   #导入创建进程模块
    def func():
        print('啦啦啦')
        print('子进程',os.getpid())    #打印当前程序的进程  子进程 3692
    
    if __name__=='__main__':   #必须有这个
        p=Process(target=func)   #创建一个进程对象
        print('主进程', os.getpid())   #主进程 15416
        print('呼哈哈')
        p.start()            #开启这个进程,这个时候,进程才算真的创建起来了
        print('主进程',os.getpid())    #主进程 15416
    #执行的打印顺序是:呼哈哈--主进程15664--啦啦啦--子进程5948
    #说明我们确实创建了一个子进程
    #异步非阻塞:因为既打印了’呼哈哈‘,又打印了’啦啦啦‘,也就是在创建子进程的时候,你影响主进程,
    (2)join方法  进程对象.join()  ---->阻塞作用
    def func():
        print('子进程',os.getpid())    #子进程 7872
        print('你好')
    
    
    if __name__=='__main__':
        p=Process(target=func)
        p.start()
        p.join()  #加阻塞,结果是主进程会等待子进程运行完才会执行
        print('主进程',os.getpid())      #主进程 10572#   说明是异步
    # 执行的打印顺序是:子进程 16276-->你好--->主进程 8732
    # 说明主进程被阻塞了,加join后,让程序从原来的   异步非阻塞 变成了--->异步阻塞
    (3)进程可以传参,但是必须传一个元祖,当括号里只有一个值的时候要加一个逗号
    def func(msg):
        print('子进程',os.getpid())    #子进程 7872
        print('你好%s'%msg)
    
    
    if __name__=='__main__':
        p=Process(target=func,args=('你好',))   #传参
        p.start()
        p.join()  #加阻塞,结果是主进程会等待子进程运行完才会执行
        print('主进程',os.getpid())
    (4)开启多个子进程,用for 循环
    def func(i):
        print('%d,子进程%d,主进程%d'%(i,os.getpid(),os.getppid()))
    if __name__=='__main__':
        p_l = []
        for i in range(10):
            p=Process(target=func,args=(i,))
            p.start()
            p_l.append(p)
        for p in p_l:
            p.join()    #异步阻塞每个开启的子进程阻塞,就可以事项打印‘主进程’在子进程结束后再执行,变成异步阻塞 
    print('主进程')
    (5)用面向对象知识来创建进程:通过继承
    import os
    from multiprocessing import Process
    class MyProcess(Process):
        def run(self):
            print('子进程:%d'%os.getpid())
            self.walk()  # --->在子进程中调用
    
        def walk(self): # 自定义的 可以不定义
            print('子进程:%d' % os.getpid())
    
    if __name__ == '__main__':
        p = MyProcess()
        p.start()    # --->  run方法
        # p.walk()     # --->  也可以在主进程中调用walk
        print('主进程 :',os.getpid())
    
    
  • 相关阅读:
    利用API对OWLS描述的服务进行操作 转贴
    转arcgis server部署 自己安装的体会
    最后一次的温柔
    JUDDI安装完整版 (转帖W3CHINA)
    jUDDI安装总结
    Protege中安装owls editor、graphviz插件
    改完了开题报告 舒口气
    服务组合的QoS信息
    owls editor
    一、性能测试术语
  • 原文地址:https://www.cnblogs.com/zzy-9318/p/8414149.html
Copyright © 2011-2022 走看看