zoukankan      html  css  js  c++  java
  • day 30-1 操作系统与进程

    操作系统介绍

    即使可以利用的cpu只有一个(早期的计算机确实如此),也能保证支持(伪)并发的能力。将一个单独的cpu变成多个虚拟的cpu(多道技术:实现多路复用和空间多路复用+硬件上支持隔离),没有进程的抽象,现代计算机将不复存在。

    必备的理论基础:

    一 操作系统的作用:
        1:隐藏丑陋复杂的硬件接口,提供良好的抽象接口
        2:管理、调度进程,并且将多个进程对硬件的竞争变得有序
    
    二 多道技术:
        1.产生背景:针对单核,实现并发
        ps:
          现在的主机一般是多核,那么每个核都会利用多道技术
          有4个cpu,运行于cpu1的某个程序遇到io阻塞,会等到io结束再重新调度,会被调度到4个
          cpu中的任意一个,具体由操作系统调度算法决定。
    
        2.空间上的复用:如内存中同时有多道程序
        3.时间上的复用:复用一个cpu的时间片
           强调:遇到io切,占用cpu时间过长也切,核心在于切之前将进程的状态保存下来,这样
                才能保证下次切换回来时,能基于上次切走的位置继续运行

    多进程

    什么是进程

    进程:正在进行的一个过程或者说一个任务。而负责执行任务则是cpu。

    进程与程序的区别

    程序仅仅只是一堆代码而已,而进程指的是程序的运行过程。
    需要强调的是:同一个程序执行两次,那也是两个进程,比如打开视频播放器,虽然都是同一个软件,但是一个可以播放秦时明月,一个可以播放斗罗大陆。

    并发与并行

    无论是并行还是并发,在用户看来都是'同时'运行的,不管是进程还是线程,都只是一个任务而已,真是干活的是cpu,cpu来做这些任务,而一个cpu同一时刻只能执行一个任务。

    一 并发:是伪并行,即看起来是同时运行。单个cpu+多道技术就可以实现并发。

    举例(单核+多道,实现多个进程的并发执行):

    亦双弓在一个时间段内有多个任务要做:做饭,看书,交女朋友的任务,玩游戏的任务。

    但亦双弓同一时刻只能做一个任务(cpu同一时间只能干一件事情),如何才能实现多个任务并发执行的效果呢?

    亦双弓看一会书,做一会饭,和女朋友聊聊天,在一起玩玩游戏....这就实现了每个任务都在进行中。

    二 并行:同时运行,只有具备多个cpu才能实现并行。

    单核下,可以利用多道技术,多个核,每个核也都可以利用多道技术(多道技术是针对单核而言的)

    有四个核,六个任务,这样同一时间有四个任务被执行,假设分别被分配给了cpu1,cpu2,cpu3,cpu4,

    一旦任务1遇到I/O就被迫中断执行,此时任务5就拿到cpu1的时间片去执行,这就是单核下的多道技术

    而一旦任务1的I/O结束了,操作系统会重新调用它(需知进程的调度、分配给哪个cpu运行,由操作系统说了算)

    可能被分 配给四个cpu中的任意一个去执行

    进程的层次结构

    无论UNIX还是windows,进程只有一个父进程,不同的是:

    1. 在UNIX中所有的进程,都是以init进程为根,组成树形结构。父子进程共同组成一个进程组,这样,当从键盘发出一个信号时,该信号被送给当前与键盘相关的进程组中的所有成员。

    2. 在windows中,没有进程层次的概念,所有的进程都是地位相同的,唯一类似于进程层次的暗示,是在创建进程时,父进程得到一个特别的令牌(称为句柄),该句柄可以用来控制子进程,但是父进程有权把该句柄传给其他子进程,这样就没有层次了。

    进程的状态

    状态:运行态、阻塞态、就绪态。

    tail -f access.log |grep '404'

    执行程序tail,开启一个子进程,执行程序grep,开启另外一个子进程,两个进程之间基于管道'|'通讯,将tail的结果作为grep的输入。

    进程grep在等待输入(即I/O)时的状态称为阻塞,此时grep命令都无法运行

    其实在两种情况下会导致一个进程在逻辑上不能运行,

    1. 进程挂起是自身原因,遇到I/O阻塞,便要让出CPU让其他进程去执行,这样保证CPU一直在工作

    2. 与进程无关,是操作系统层面,可能会因为一个进程占用时间过多,或者优先级等原因,而调用其他的进程去使用CPU。

    因而一个进程由三种状态

    进程的终止

    1. 正常退出(自愿,如用户点击交互式页面的叉号,或程序执行完毕调用发起系统调用正常退出,在linux中用exit,在windows中用ExitProcess)

    2. 出错退出(自愿,python a.py中a.py不存在)

    3. 严重错误(非自愿,执行非法指令,如引用不存在的内存,1/0等,可以捕捉异常,try...except...)

    4. 被其他进程杀死(非自愿,如kill -9

     

  • 相关阅读:
    Win8系统 Python安装
    一些安卓开源框架整理
    Android 媒体键监听以及模拟媒体键盘的实现 demo
    android View 自动 GONE 问题
    Android 定时器TimerTask 简单使用
    关于Android studio 相对 eclipse 优点
    Java序列化与反序列化
    android shape的使用 边框
    Android Studio 修改 包名 package name
    Android WebView Long Press长按保存图片到手机
  • 原文地址:https://www.cnblogs.com/ysging/p/12311302.html
Copyright © 2011-2022 走看看