精华内容
下载资源
问答
  • 什么说PCB进程存在唯一标志

    千次阅读 2020-07-20 14:49:06
    PCB使一个在多道程序环境下不能独立运行的程序(含数据)成为一个能独立运行的基本单位,一个能与其他进程并发执行的进程,因此PCB为了保证程序的并发执行。创建进程,实质创建进程的PCB;而撤销进程,实质上...

    为什么说PCB是进程存在的唯一标志

    首先来看PCB的作用:
    PCB是系统为每个进程定义的一个数据结构,其作用是使程序(含数据)能独立运行;PCB使一个在多道程序环境下不能独立运行的程序(含数据)成为一个能独立运行的基本单位,一个能与其他进程并发执行的进程,因此PCB是为了保证程序的并发执行。创建进程,实质上是创建进程的PCB;而撤销进程,实质上是撤销进程的PCB。

    其次来解释为什么PCB是进程存在的唯一标志
    在系统调度到某进程后,要根据其PCB中所保存的处理机状态信息,设置该进程恢复运行的现场,并根据其PCB中的程序和数据的内存地址,找到其程序和数据;进程在执行过程中,当需要和与之合作的进程实现同步、通信或访问文件时,也都需要访问PCB;当进程由于某种原因而暂停执行时,又需将其断点的处理机环境保存在PCB中。可见,在进程的整个生命周期中,系统总是通过PCB对进程进行控制的,亦即系统是根据 进程的PCB感知该进程的存在的,所以,PCB是进程存在的唯一标志。

    展开全文
  • ①并发: 并发编程又叫多线程编程,并发的实质是一个物理上的CPU在若干道程序之间多路复用,有限的资源多用户共享提高效率。...多道程序的环境下,允许程序同一时刻在不同的CPU同时执行。当系统有一个以上...

    ①并发:

          并发编程又叫多线程编程,并发的实质是一个物理上的CPU在若干道程序之间多路复用,有限的资源多用户共享提高效率。任务数多余CPU的核数,通过操作系统的任务调度算法,实现多个任务一起执行的。一个CPU不可能真正同时运行一个一个以上的线程,只能把CPU的时间分为多个时间段,再将各个时间段分给多个线程执行,其他线程处于挂起状态,这种方式称为并发。

    ②并行:

          两个或者两个以上的事件或者活动在同一时刻发生。多道程序的环境下,允许程序同一时刻在不同的CPU同时执行。当系统有一个以上的CPU的时候,则线程的操作有可能非并发,线程在不同的CPU执行,互不抢占CPU的资源,可以同时执行。

    ③ 串行和并行:

          串行是指多个任务的时候,各个人物按顺序执行完成一个任务之后才能完成下一个任务。并行是多个任务可以同时执行,异步是多个任务并行的前提条件,也就是并行的线程一定是异步执行的)

    ④同步和异步:

          同步和异步是指能否开启新的线程。同步不能开启新的线程,异步是可以的。异步和同步是相对的,同步是顺序执行的,执行万一个再执行完下一个,需要等待,协调执行。异步是彼此独立,在等待某事件的过程中,继续做自己的事情,不需要等待上一个事件完成后再继续工作。线程是实现异步的一个方式。异步是让调用方法的主线程不需要同步的等待另一个线程的完成,从而可以主线程做其他的事情。异步是一个调用请求发送给被调用者,而被调用者不用等待结果的返回可以做其他的事情,实现异步可以采取多线程的技术或者交给其他的线程进行处理。例如同步:多任务情况下,一个任务A执行结束,才可以执行另一个任务B,只存在一个线程;异步:多个线程,一个任务A正在执行,同时可以执行另一任务B,任务B不用等待任务A结束才执行,促存在多条线程。

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • 一.什么是进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构...(1)动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态...

    一.什么是进程

    进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体,在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。

    二.进程的特征

    (1)动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。
    (2)并发性:任何进程都可以同其他进程一起并发执。
    (3)独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位。
    (4)异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进。
    结构特征:进程由程序、数据和进程控制块三部分组成。
    多个不同的进程可以包含相同的程序:一个程序在不同的数据集里就构成不同的进程,能得到不同的结果;但是执行过程中,程序不能发生改变。

    三.进程的状态

    运行中的进程可能具有以下三种基本状态。
    1)就绪状态(Ready):
    进程已获得除处理器外的所需资源,等待分配处理器资源;只要分配了处理器进程就可执行。就绪进程可以按多个优先级来划分队列。例如,当一个进程由于时间片用完而进入就绪状态时,排入低优先级队列;当进程由I/O操作完成而进入就绪状态时,排入高优先级队列。
    2)运行状态(Running):
    进程占用处理器资源;处于此状态的进程的数目小于等于处理器的数目。在没有其他进程可以执行时(如所有进程都在阻塞状态),通常会自动执行系统的空闲进程。
    3)阻塞状态(Blocked):
    由于进程等待某种条件(如I/O操作或进程同步),在条件满足之前无法继续执行。该事件发生前即使把处理机分配给该进程,也无法运行。
    1150837-20170522175632429-278709125.png

    四.区别

    程序:
    程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。而进程是程序在处理机上的一次执行过程,它是一个动态的概念。
    程序可以作为一种软件资料长期存在,而进程是有一定生命期的。程序是永久的,进程是暂时的。
    进程更能真实地描述并发,而程序不能;
    进程是由进程控制块、程序段、数据段三部分组成;
    进程具有创建其他进程的功能,而程序没有。
    同一程序同时运行于若干个数据集合上,它将属于若干个不同的进程。也就是说同一程序可以对应多个进程。
    在传统的操作系统中,程序并不能独立运行,作为资源分配和独立运行的基本单元都是进程。
    线程:
    通常在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源。在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位。由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统内多个程序间并发执行的程度。
    因而近年来推出的通用操作系统都引入了线程,以便进一步提高系统的并发性,并把它视为现代操作系统的一个重要指标。
    1150837-20170522175833445-1768727488.png

    五.引起创建进程的事件:

    (1)用户登录:为终端用户建立一进程
    (2)作业调度:(不是进程调度)为被调度的作业建立进程
    (3)提供服务:如要打印时建立打印进程
    (4)应用请求:由应用程序建立多个进程

    课后实验总结:

    fwrite()函数和fread()函数
    1.函数功能
    用来读写一个数据块。
    2.一般调用形式
    fread(buffer,size,count,fp);
    fwrite(buffer,size,count,fp);
    3.说明
    (1)buffer:是一个指针,对fread来说,它是读入数据的存放地址。对fwrite来说,是要输出数据的地址。
    (2)size:要读写的字节数;
    (3)count:要进行读写多少个size字节的数据项;
    (4)fp:文件型指针。
    4.例:
    1.fread(&id,1,10,f)就是把f里面的值读到id里面,每次读1个字节,一共读10次,或者把id里面的值都读完,不到10次也会停止。
    2.fwrite(&id,1,10,f)就是把id里面的值读到f里面,每次读1个字节,一共读10次或是fread(&id,10,1,f)就是把id里面的值读到里面,每次读10个字节,一共读1次。

    fork()函数
    (1)fork入门知识
    一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,
    也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。
    (2)一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都
    复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。

    exit()和_exit()
    exit和_exit函数都是用来终止进程的。当程序执行到exit或_exit时,系统无条件的停止剩下所有操作,清除包括PCB在内的各种数据结构,并终止本进程的运行。但是,这两个函数是有区别的。
    exit()函数的作用是:直接使用进程停止运行,清除其使用的内存空间,并清除其在内核中的各种数据结构;exit()函数则在这一基础上做了一些包装。在执行退出之前加了若干道工序。exit()函数与_exit()函数最大区别就在于exit()函数在调用exit系统之前要检查文件的打开情况,把文件缓冲区的内容写回文件。
    由于Linux的标准函数库中,有一种被称作“缓冲I/O”的操作,其特征就是对应每一个打开的文件,在内存中都有一片缓冲区。每次读文件时,会连续的读出若干条记录,这样在下次读文件时就可以直接从内存的缓冲区读取;同样,每次写文件的时候也仅仅是写入内存的缓冲区,等满足了一定的条件(如达到了一定数量或遇到特定字符等),再将缓冲区中的内容一次性写入文件。
    这种技术大大增加了文件读写的速度,但也给编程代来了一点儿麻烦。比如有一些数据,认为已经写入了文件,实际上因为没有满足特定的条件,它们还只是保存在缓冲区内,这时用_exit()函数直接将进程关闭,缓冲区的数据就会丢失。因此,要想保证数据的完整性,就一定要使用exit()函数。
    Exit的函数声明在stdlib.h头文件中。
    _exit的函数声明在unistd.h头文件当中。

    wait()和waitpid()函数
    当一个进程正常或异常终止时,内核就向其父进程发送SIGCHLD信号。因为子进程终止是个异步事件,这种信号也是内核向父进程发的异步通知。父进程可以忽略该信号,或者提供一个该信号发生时即被调用执行的函数(信号处理程序)。
    父进程同步等待子进程退出时则调用wait函数,此时父进程可能会有如下三种情形:
    (1)阻塞(如果其所有子进程都还在运行)。
    (2)带回子进程的终止状态立即返回(如果已有一个子进程终止,正等待父进程取其终止状态)。
    (3)出错立即返回(如果它没有任何子进程)。

    wait(等待子进程的中断和结束)
    1150837-20170522181531038-1328861697.png

    waitpid(等待子进程的中断和结束)
    1150837-20170522181736617-886759371.png
    1150837-20170522181750273-42158103.png

    wait和waitpid两函数的说明
    如果父进程的所有子进程都还在运行,调用wait将使父进程阻塞,而调用waitpid时,如果在options参数中指定WNOHANG可以使父进程不阻塞而立即返回0。
    wait等待第一个终止的子进程,而waitpid可以通过pid参数指定等待哪一个子进程。
    当pid=-1、option=0时,waitpid函数等同于wait,可以把wait看作waitpid实现的特例。
    可见,调用wait和waitpid不仅可以获得子进程的终止信息,还可以使父进程阻塞等待子进程终止,起到进程间同步的作用。如果参数status不是空指针,则子进程的终止信息通过这个参数传出,如果只是为了同步而不关心子进程的终止信息,可以将status参数指定为NULL。
     
    waitpid函数提供了wait函数没有提供的三个功能:
    (1)waitpid等待一个特定的进程,而wait则返回任一终止子进程的状态 。
    (2)waitpid提供了一个 wait的非阻塞版本,有时希望取得一个子进程的状态,  但不想进程阻塞。
    (3)waitpid支持作业控制。

    转载于:https://www.cnblogs.com/mitsuhas/p/6890745.html

    展开全文
  • 又见block(一):block是什么

    千次阅读 2018-08-31 16:12:43
    block的原理实质问题一道分水岭,区分中高级程序的试金石,一般的大公司,他可能不会问你内存管理甚至线程编程与简单的一笔带过,但是block一定会仔细问。无奈的平时只知使用,对其原理与实质没有深究,因此数...
    block的原理是一道分水岭,区分中高级程序的试金石,一般的大公司,他可能不会问你内存管理,甚至多线程编程问题也简单的一笔带过,但是block一定会仔细问。可惜的是平时只知使用,对其原理与实质没有深究,因此数次面试倒在这道坎上,真是心有不甘,这次好好理理关于block的前因后果,以供后续随手翻阅查证。

    block的定义:带有自动变量(局部变量)的匿名函数

    想要说明什么是匿名函数,先来了解下什么是函数以及函数指针

    • 函数:函数是C语言程序中的重要组成部分,不同函数调用的组合实现程序的各个功能。
      格式如下:
        returnType funcName(paramter List){
            //funcBody
        }

    returnType:函数返回值
    funcName:函数名
    paramter List:参数列表
    funcBody:函数体
    一个简单的函数如下:

        int funcSum (int count) {
            return count + 10;
        }

    定义了一个名为funcSum的函数,有一个int类型的形参,返回值是int类型
    函数调用如下:

        int result = funcSum(18);
    • 函数指针:除了直接调用函数之外,我们还可以定义一个函数指针来指向这个函数地址,通过调用函数指针进而调用指向的函数,函数指针的定义如下:
        returnType (*FuncPointer)(Paramter List)

    继续上面定义的funcSum函数,现在定一个函数指针指向这个函数

        int*funcPointer)(int)= &funcSum;

    调用函数指针方式如下:

        int result = (*funcPointer)(18);

    通过函数指针可以来调用函数,但是在给函数指针赋值的过程中,依然用到了函数名,因此在C语言中要想调用函数,无论是直接调用还是通过函数指针来调用都无法绕过函数名。

    但是OC中的block,就可以使用不带函数名称的函数,即匿名函数,被看着是C语言的扩充功能。

    在了解什么是匿名函数后,再来说说“带有自动变量(局部变量)”是什么意思?
    变量的类型以及存储位置

    • 全局变量:全局静态区
    • 全局静态变量:全局静态区
    • 局部静态变量:栈
    • 局部变量:栈
      内存分布
      局部变量:包括静态局部变量都是存在栈中的,超过作用域后就会被销毁
      全局变量:包括全局静态变量,既不是存在栈中,也不是存在堆中,而是存放在“全局区/静态区”,占用静态的存储单元

    block做为匿名函数,不但能访问全局变量,更重要的是拥有捕获函数外局部变量的功能,一般情况下,block中访问一个外部局部变量,block会持用它的临时状态,自动捕获变量值,捕获后修改外部的局部变量不会影响block内部捕获的状态
    比较经典的例子:

        int val = 23;
        void (^block) (void) = ^{
            NSLog(@"val = %d",val);
        };
        val = 2;
        block();

    代码输出为:val = 23,不是2
    block在定义实现时,就会对它捕获的外部局部变量进行一次只读拷贝,然后在block中使用该只读拷贝,即外部局部变量的副本,所以block外部修改局部变量,对其内部的副本无影响,就是说block捕获的是局部变量的瞬时值
    那么这种情况下能否在block内对局部变量val值进行修改呢?尝试报错截图如下:
    这里写图片描述
    根据错误提示,我们修改代码如下

        __block int val = 23;
        void (^block) (void) = ^{
            NSLog(@"val = %d",val);
        };
        val = 2;
        block();

    代码输出结果为:val = 2,并且此时可以在block中修改外部的局部变量值


    为什么在局部变量定义前加__block就能在block中修改捕获的局部变量值了,后面再继续分析,本节完,待续……

    参考文章
    又见block(二):block语法定义
    又见block(三):block实质
    又见block(四):block捕获自动变量
    又见block(五): __block变量和对象
    又见block(六):block存储域与__block变量存储域
    又见block(七):截获对象

    展开全文
  • 并发的实质是一个物理CPU(也可以个物理CPU) 在若干道程序(或线程)之间路复用,并发性是对有限物理资源强制行使用户共享以提高效率。 微观角度:所有的并发处理都有排队等候,唤醒,执行等这样的步骤,在...
  • linux下进程

    2017-12-09 18:34:50
    进程管理是操作系统重点、难点问题,也是贯穿Linux学习的知识点。那么什么是进程? 大多数情况下我们所听到最多的说法是:进程是... 动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是 动态产生,动态
  • 进程描述与控制 一、什么是进程? ①一个正在执行的程序; ②一个在计算机上执行的程序实例;...动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。 并发
  • 导图 1. 虚拟存储器 1.1 是什么 虚拟存储器是指具有请求调入功能和置换功能,能从逻辑上对内存容量进行扩充一种存储器系统。... 2)提高多道程序度:在进行进程运行时候,并不是一口气...
  • 进程笔记

    2019-09-21 21:05:49
    背景知识 顾名思义,进程即正在执行的一个过程,进程是对正在运行程序的一个抽象什么是进程: 进程是计算机中的程序关于... 动态性:进程的实质是程序在多道程序系统中的依次执行过程,进程是动态产生,动态消亡的 并发性...
  • multiprocess模块

    2018-12-07 16:41:00
    什么是进程 什么是进程 进程是计算机中的程序关于某数据集合一次运行活动,是系统进行资源分配和调度的基本单位,是...动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。 ...
  • 如果Turbine构成您应用程序的核心,那么它就是极好的选择。 如果个使用者需要并行处理数据,然后允许执行“业务”逻辑,则使用Turbine(与Disruptor)类似。 当您需要每秒处理数百万个事件时,Turbine很有用。 ...
  • 认识进程

    2019-04-06 22:29:57
    什么是进程? 狭义定义:进程就是一段程序的执行过程。  广义定义:进程是一... 动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。 并发性:任何进程都可以同其他进程...
  • python之进程

    2018-02-02 23:04:00
    动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。 并发性:任何进程都可以同其他进程一起并发执行 独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的...
  • 操作系统存储管理问总结

    千次阅读 2009-09-13 16:45:00
    问题一:⑴ 存储管理的实质是什么?(对内存的管理,主要对内存中用户区进行管理)⑵ 多道程序中,为方便用户和充分利用内存以提高内存利用率,内存管理的任务是什么?(内存空间的分配和回收、内存空间的共享、存储...
  • 进程基础知识

    2017-07-03 20:05:11
    a) 处理器在多道程序之间进行切换 b) 并发执行程序共享系统资源,共同对这些资源进行操作 c) 系统中各个执行程序相互制约 2. 进程概念 定义:进程程序在一个数据集合上运行过程,系统进行资源...
  • 第4章 进程

    2016-04-19 11:01:57
    进程 = 程序 + 运行 ----> 最早OS中进程又叫job,其实质就是运行中的程序为了提高cpu利用率,实现多道编程,产生进程概念;可以单机多进程(实例)工作进程有三个状态:阻塞、就绪、运行 4.2 进程创立 ...
  • 操作系统——进程

    2021-01-04 18:33:12
    多道操作系统中,程序的执行属于并发执行,此时他们将失去其封闭性,并具有间断性,以及其运行结果不可再现的特性,为能使程序并发执行,并且可以对并发执行的程序加一描述和控制,就需要引入进程这个概念。...
  • 扫盲大队-线程池

    2019-09-24 10:31:07
    并发(Concurrency)的实质是一个物理CPU(也可以个物理CPU) 在若干道程序(或线程)之间路复用,并发性是对有限物理资源强制行使用户共享以提高效率。 从微观角度来讲:所有的并发处理都有排队等候,唤醒,...
  • (3)引入进程的意义描述多道程序设计系统中程序的动态执行过程。 2、进程的定义及特征 (1)程序和进程的区别 (2)进程的五个基本特征:动态性、并发性、独立性、制约性、结构性 3、进程...
  • 3)多道程序并行处理 4)可靠性要求 組成:运行软件系统和支持软件系统 35.简述栏控交換机操作系统基本功能。 答!租控交换机操作系统主要完成以下功能 内存管理、程序调度、程序间通信、处理机间通信(在多处理...
  • Java程序员面试宝典pdf

    热门讨论 2013-02-21 13:06:13
    面试题027 简述一下内部类的实质是什么 50 3.3 包和访问控制 52 面试题028 包应该如何被创建及使用 53 面试题029 说明private、protected、public和default的区别 54 3.4 小结 55 第4章 数据类型及类型转换( 教学...
  • 面试题027 简述一下内部类的实质是什么 50 3.3 包和访问控制 52 面试题028 包应该如何被创建及使用 53 面试题029 说明private、protected、public和default的区别 54 3.4 小结 55 第4章 数据类型及类型转换( ...
  • 二十三种设计模式【PDF版】

    热门讨论 2011-05-30 14:13:49
    如果你还不了解设计模式是什么的话? 那就先看设计模式引言 ! 学习 GoF 设计模式重要性 建筑和软件中模式之异同 A. 创建模式 设计模式之 Singleton(单态/单件) 阎宏博士讲解:单例(Singleton)模式 保证...
  • 一个简单的应用给应用程序的快捷方式换图标,这时候就必须使用ico格式的图标了。另外只有Windows XP以上的系统才支持带Alpha透明通道的图标,这些图标用在Windows XP以下的系统上会很难看。 ICL icl文件只不过...
  • AIF,AIFF:音频互交换文件,Silicon Graphic and Macintosh应用程序的声音格式 ANI:Windows系统中的动画光标 ARC:LH ARC的压缩档案文件 ARJ:Robert Jung ARJ压缩包文件 ASD:Microsoft Word的自动保存文件;...
  • 17.1.1 什么是物理引擎 463 17.1.2 常见物理引擎 463 17.2 jbullet物理引擎 466 17.2.1 基本物理学概念 466 17.2.2 jbullet中常用类介绍 468 17.3 箱子相互碰撞案例 475 17.3.1 案例运行...
  • 2、知识图谱数据导入:python build_medicalgraph.py,导入数据较,估计需要几个小时。 3、启动问答:python chat_graph.py 以下介绍详细方案 一、医疗知识图谱构建 1.1 业务驱动知识图谱构建框架 1.2 ...

空空如也

空空如也

1 2
收藏数 30
精华内容 12
关键字:

多道程序的实质是什么