精华内容
下载资源
问答
  • 每一个Android应用程序都在它自己的进程中运行,不一定拥有一个独立 的Dalvik虚拟机实例.而每一个DVM都是在Linux的一个进程,所以说可以认为是同一个概念.b DVM指dalvik的虚拟机.每一个Android应用程序都在它自己...

    D
    a DVM指dalvik的虚拟机.每一个Android应用程序都在它自己的进程中运行,不一定拥有一个独立 的Dalvik虚拟机实例.而每一个DVM都是在Linux中的一个进程,所以说可以认为是同一个概念.
    b DVM指dalvik的虚拟机.每一个Android应用程序都在它自己的进程中运行,不一定拥有一个独立的Dalvik虚拟机实例.而每一个DVM不一定都是在Linux 中的一个进程,所以说不是一个概念.
     c DVM指dalvik的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例.而每一个DVM不一定都是在Linux 中的一个进程,所以说不是一个概念
    d DVM指dalvik的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的 Dalvik虚拟机实例.而每一个DVM都是在Linux 中的一个进程,所以说可以认为是同一个概念.
    展开全文
  • 关于 linux init 进程

    2020-03-02 16:35:38
    0、1、 2号进程是一个系统非常重要的三个进程,他们有各自的职责。 0 号进程是操作系统跑起来运行的第一个进程。 1号进程就是init进程,它负责一些处理与用户空间进程相关的进程, 1号进程是所有用户进程的祖先。...

    Init 进程是用户空间运行的第一个进程 进程id为1

    0、1、 2号进程是一个系统中非常重要的三个进程,他们有各自的职责。

    • 0 号进程是操作系统跑起来运行的第一个进程。
    • 1号进程就是init进程,它负责一些处理与用户空间进程相关的进程, 1号进程是所有用户进程的祖先。init进程是不可以被关闭的,除非关闭系统。
    • 2号进程负责与内核空间相关的进程。 用户空间在运行之前,内核(空间)已经在运行。
    展开全文
  • 关于epoll和select的区别,哪些说法正确的? 正确答案: A B C epoll和select都是I/O多路复用的技术,都可以实现同时监听多个I/O事件的状态 epoll相比select效率更高,主要是基于其操作系统支持...

    关于epoll和select的区别,哪些说法是正确的?

    正确答案: A B C   

    epoll和select都是I/O多路复用的技术,都可以实现同时监听多个I/O事件的状态
    epoll相比select效率更高,主要是基于其操作系统支持的I/O事件通知机制,而select是基于轮询机制
    epoll支持水平触发和边沿触发两种模式
    select能并行支持I/O比较小,且无法修改


    select和epoll这两个机制都是多路I/O机制的解决方案,select为POSIX标准中的,而epoll为Linux所特有的。
    epoll的最大好处是不会随着FD的数目增长而降低效率,在select中采用轮询处理,其中的数据结构类似一个数组的数据结构,而epoll是维护一个队列,直接看队列是不是空就可以了。
    nginx就是使用epoll来实现I/O复用支持高并发,目前在高并 发的场景下,nginx越来越收到欢迎。
    select的一 个缺点在于单个进程能够监视的文件描述符的数量存在最大限制
    epoll:
    (1)IO的效率不会随着监视fd的数量的增长而下降。epoll不同于select和poll轮询的方式,而是通过每个fd定义的回调函数来实现的。只有就绪的fd才会执行回调函数;
    (2)支持电平触发和边沿触发(只告诉进程哪些文件描述符刚刚变为就绪状态,它只说一遍,如果我们没有采取行动,那么它将不会再次告知,这种方式称为边缘触发)两种方式,理论上边缘触发的性能要更高一些,但是代码实现相当复杂。
    (3)有着良好的就绪事件通知机制
    select:
    (1)单个进程可监视的fd数量受到了限制,在32位机器上,他所能管理的fd数量最大为1024;
    (2)对socket进行扫描时是线性扫描,当socket文件描述符数量变多时,大量的时间是被白白浪费掉的。


    select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。 但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的 ,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间。关于这三种IO多路复用的用法,前面三篇总结写的很清楚,并用服务器回射echo程序进行了测试。连接如下所示:

    select:http://www.cnblogs.com/Anker/archive/2013/08/14/3258674.html

    poll:http://www.cnblogs.com/Anker/archive/2013/08/15/3261006.html

    epoll:http://www.cnblogs.com/Anker/archive/2013/08/17/3263780.html

    今天对这三种IO多路复用进行对比,参考网上和书上面的资料,整理如下:

    1、select实现

    select的调用过程如下所示:

    (1)使用copy_from_user从用户空间拷贝fd_set到内核空间

    (2)注册回调函数__pollwait

    (3)遍历所有fd,调用其对应的poll方法(对于socket,这个poll方法是sock_poll,sock_poll根据情况会调用到tcp_poll,udp_poll或者datagram_poll)

    (4)以tcp_poll为例,其核心实现就是__pollwait,也就是上面注册的回调函数。

    (5)__pollwait的主要工作就是把current(当前进程)挂到设备的等待队列中,不同的设备有不同的等待队列,对于tcp_poll来说,其等待队列是sk->sk_sleep(注意把进程挂到等待队列中并不代表进程已经睡眠了)。在设备收到一条消息(网络设备)或填写完文件数据(磁盘设备)后,会唤醒设备等待队列上睡眠的进程,这时current便被唤醒了。

    (6)poll方法返回时会返回一个描述读写操作是否就绪的mask掩码,根据这个mask掩码给fd_set赋值。

    (7)如果遍历完所有的fd,还没有返回一个可读写的mask掩码,则会调用schedule_timeout是调用select的进程(也就是current)进入睡眠。当设备驱动发生自身资源可读写后,会唤醒其等待队列上睡眠的进程。如果超过一定的超时时间(schedule_timeout指定),还是没人唤醒,则调用select的进程会重新被唤醒获得CPU,进而重新遍历fd,判断有没有就绪的fd。

    (8)把fd_set从内核空间拷贝到用户空间。

    总结:

    select的几大缺点:

    (1)每次调用select,都需要把fd集合从用户态拷贝到内核态,这个开销在fd很多时会很大

    (2)同时每次调用select都需要在内核遍历传递进来的所有fd,这个开销在fd很多时也很大

    (3)select支持的文件描述符数量太小了,默认是1024 (但是是可以进行修改的,可以修改内核的FDSET宏,但是要重新编译内核)

    这种不停的修改内核以及查找时间是O(n)使得人们逐渐在探索新的方式替代它.............

    2 poll实现

    poll的实现和select非常相似,只是描述fd集合的方式不同,poll使用pollfd结构而不是select的fd_set结构,其他的都差不多。

    关于select和poll的实现分析,可以参考下面几篇博文:

    http://blog.csdn.net/lizhiguo0532/article/details/6568964#comments

    http://blog.csdn.net/lizhiguo0532/article/details/6568968

    http://blog.csdn.net/lizhiguo0532/article/details/6568969

    http://www.ibm.com/developerworks/cn/linux/l-cn-edntwk/index.html?ca=drs-

    http://linux.chinaunix.net/techdoc/net/2009/05/03/1109887.shtml

    3、epoll

    epoll既然是对select和poll的改进,就应该能避免上述的三个缺点。那epoll都是怎么解决的呢?在此之前,我们先看一下epoll和select和poll的调用接口上的不同,select和poll都只提供了一个函数——select或者poll函数。而epoll提供了三个函数,epoll_create,epoll_ctl和epoll_wait,epoll_create是创建一个epoll句柄;epoll_ctl是注册要监听的事件类型;epoll_wait则是等待事件的产生。

    对于第一个缺点,epoll的解决方案在epoll_ctl函数中。每次注册新的事件到epoll句柄中时(在epoll_ctl中指定EPOLL_CTL_ADD),会把所有的fd拷贝进内核,而不是在epoll_wait的时候重复拷贝。epoll保证了每个fd在整个过程中只会拷贝一次。

    对于第二个缺点,epoll的解决方案不像select或poll一样每次都把current轮流加入fd对应的设备等待队列中,而只在epoll_ctl时把current挂一遍(这一遍必不可少)并为每个fd指定一个回调函数,当设备就绪,唤醒等待队列上的等待者时,就会调用这个回调函数,而这个回调函数会把就绪的fd加入一个就绪链表)。epoll_wait的工作实际上就是在这个就绪链表中查看有没有就绪的fd(利用schedule_timeout()实现睡一会,判断一会的效果,和select实现中的第7步是类似的)。 (Linux 2.6内核之后这个链表就使用红黑树来实现达到插入和查找速度快的目的)

    对于第三个缺点,epoll没有这个限制,它所支持的FD上限是最大可以打开文件的数目,这个数字一般远大于2048,举个例子,在1GB内存的机器上大约是10万左右,具体数目可以cat /proc/sys/fs/file-max察看,一般来说这个数目和系统内存关系很大。

    总结:

    (1)select,poll实现需要自己不断轮询所有fd集合,直到设备就绪,期间可能要睡眠和唤醒多次交替。而epoll其实也需要调用epoll_wait不断轮询就绪链表,期间也可能多次睡眠和唤醒交替,但是它是设备就绪时,调用回调函数,把就绪fd放入就绪链表中,并唤醒在epoll_wait中进入睡眠的进程。虽然都要睡眠和交替,但是select和poll在“醒着”的时候要遍历整个fd集合,而epoll在“醒着”的时候只要判断一下就绪链表是否为空就行了,这节省了大量的CPU时间。这就是回调机制带来的性能提升。

    (2)select,poll每次调用都要把fd集合从用户态往内核态拷贝一次,并且要把current往设备等待队列中挂一次,而epoll只要一次拷贝,而且把current往等待队列上挂也只挂一次(在epoll_wait的开始,注意这里的等待队列并不是设备等待队列,只是一个epoll内部定义的等待队列)。这也能节省不少的开销。

    参考资料:

    http://www.cnblogs.com/apprentice89/archive/2013/05/09/3070051.html

    http://www.linuxidc.com/Linux/2012-05/59873p3.htm

    http://xingyunbaijunwei.blog.163.com/blog/static/76538067201241685556302/

    http://blog.csdn.net/kkxgx/article/details/7717125

    https://banu.com/blog/2/how-to-use-epoll-a-complete-example-in-c/epoll-example.c


    展开全文
  • 关于多线程和多进程编程,下面描述正确的是(): 正确答案: A C D 多进程里,子进程可获得父进程的所有堆和栈的数据;而线程会与同进程的其他线程共享数据,拥有自己的栈空间 线程因为有自己的...

    关于多线程和多进程编程,下面描述正确的是():

    正确答案: A C D

    多进程里,子进程可获得父进程的所有堆和栈的数据;而线程会与同进程的其他线程共享数据,拥有自己的栈空间
    线程因为有自己的独立栈空间且共享数据,所有执行的开销相对较大,同时不利于资源管理和保护
    线程的通信速度更快,切换更快,因为他们在同一地址空间内
    线程使用公共变量/内存时需要使用同步机制,因为他们在同一地址空间内
    因多线程里,每个子进程有自己的地址空间,因此相互之间通信时,线程不如进程灵活和方便



    线程和进程的区别联系:
    1,进程:子进程是父进程的复制品。子进程获得父进程数据空间、堆和栈的复制品。
    2,线程:相对与进程而言,线程是一个更加接近与执行体的概念,它可以与同进程的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。 
    两者都可以提高程序的并发度,提高程序运行效率和响应时间。 
    线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源管理和保护;而进程正相反。同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。
    根本区别就一点:用多进程每个进程有自己的地址空间(address space),线程则共享地址空间。所有其它区别都是由此而来的: 
    1、速度:线程产生的速度快,线程间的通讯快、切换快等,因为他们在同一个地址空间内。 
    2、资源利用率:线程的资源利用率比较好也是因为他们在同一个地址空间内。 
    3、同步问题:线程使用公共变量/内存时需要使用同步机制还是因为他们在同一个地址空间内

    展开全文
  • 在现代操作系统进程支持多线程。进程是资源管理的最小单元;而线程是程序执行的最小单元。一个进程的组成实体可以分为两大部分:线程集合资源集。进程中的线程是动态的对象;代表了进程指令的执行。资源,包括...
  • 操作系统中关于竞争和死锁的关系下面描述正确的是? A 竞争一定会导致死锁 B 死锁一定由竞争引起 C 竞争可能引起死锁 正确答案 : C知识点造成死锁的原因:1.竞争不可抢占资源2.竞争可消耗资源3.进程推进顺序...
  • 在现代操作系统进程支持多线程。进程是资源管理的最小单元;而线程是程序执行的最小单元。一个进程的组成实体可以分为两大部分:线程集合资源集。进程中的线程是动态的对象;代表了进程指令的执行。资源,包括...
  • 1、在下面的语句,有关内存实例和会话内存的哪两个说法正确的? A.SGA内存是专用内存段;PGA内存是共享内存段 B.会话可以对PGA执行写操作,不能对SGA执行写操作 C.所有会话对SGA执行写操作,只有一个会话对...
  • 进程和子进程到底是如何执行的?
  • 针对外部存储器(如磁盘)上存放的程序和数据,说法正确的是()。 正确答案: B 你的答案: B (正确) 可由CPU直接进行读取写入操作 须在CPU访问之前移入内存 必须由文件系统管理的 必须...
  • linuxfork函数及子进程进程进程先后

    万次阅读 多人点赞 2012-06-07 10:32:24
    一、fork入门知识  一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个...然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来
  • Linux进程

    2016-04-19 12:50:09
    关于 linux 的进程,下面说法正确的是: 正确答案: A A. 僵尸进程会被 init 进程接管,不会造成资源浪费; B. 孤儿进程的父进程在它之前退出,会被 init 进程接管,不会造成资源浪费; C. 进程是资源管理的最小...
  • linux 进程优先级

    千次阅读 2018-09-16 18:42:02
    Linux 中进程的优先级绝不是如想象的那么简单,相反它的概念比较混杂,它甚至不是很符合直觉。 Linux 进程的优先级跟随调度算法的不断发展,其意义在不同的阶段也有着不同的含义,所以本来想从 Linux 的调度...
  • Android 中进程、线程的概念

    千次阅读 2016-04-05 08:21:42
    一,Android 进程和线程 进程-Process 是程序的一个运行实例,以区别于“程序”这一静态的概念,线程-Thread则是cpu调度的基本单位。 一个进程的创建是通过Process.start()来完成的,其中的参数可以定制进程启动后...
  • 在Linux中进程信息存放在叫做进程控制块的数据结构,每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息。Linux内核的进程控制块是task_struct结构体。 task_struct是Linux内核的一种数据结构,它...
  • 孤儿进程与僵尸进程的理解

    千次阅读 2015-09-21 16:00:54
    僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程进程描述符仍然保存在系统。这种进程称之为僵死进程。 孤儿进程
  • 深入理解进程和线程

    千次阅读 2015-10-30 23:40:52
    在之前的博客里面(进程通信),我简单的区分了一下...线程是CPU运行调度的基本单位,线程必须被包含在进程中,一个进程可以有很多线程(至少有一个),这些线程有自己的资源(如栈,寄存器)也共享进程的许多资源。
  • Android service进程保护

    万次阅读 2016-05-11 14:16:23
    什么才叫应用进程保活应用进程保活可以理解为应用位于后台永远不能被杀死。这里的可以简略地分为两种情况,第一种是当系统资源紧俏的时候或者基于某种系统自身的后台运行规则选择杀死你的后台应用来获得更多的资源,...
  • 一、fork入门知识  一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个...然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来
  • linux系统如何使用fork函数创建子进程

    万次阅读 多人点赞 2017-09-16 15:48:00
    在linux系统创建进程有两种方式:一是由操作系统创建,二是由父进程创建进程(通常为子进程)。系统调用函数fork()是创建一个新进程的唯一方式,fork()函数是Linux系统一个比较特殊的函数,其一次调用会有两...
  • 关于 fork 和父子进程的理解

    千次阅读 多人点赞 2017-08-17 17:31:01
    关于 fork 和父子进程的理解 (http://blog.163.com/kingore@126/blog/static/8540871920097300284862/) 代码: #include #include main ()  {   pid_t pid;   pid=fork();   
  • 0,如果是在子进程中,则会返回0,若fork()函数返回值为-1,则代表创建进程失败。 用fork创建两个子进程后,若是父进程则打印‘a’,若是第一个子进程,打印‘b’,若是第二个子进程,则打印‘c’,经过大量实验...
  • 程序(进程)在cpu的执行过程

    万次阅读 多人点赞 2018-09-30 10:59:10
    进程 程序 程序编译好后,存于某个地方(外存), 当程序被要求运行时,做的事情如下: 1.把可执行程序相关数据代码等加载到内存的相应段? 2.等待cpu调度到此程序,也即是获取cpu的使用权 3.运行balabala.....
  • windows进程间通信

    千次阅读 2014-10-18 08:32:03
    编写多进程/多线程程序成为现代程序设计的一个重要特点,在多进程程序设计进程间的通信是不可避免的。Microsoft Win32 API提供了多种进程间通信的方法,全面地阐述了这些方法的特点,并加以比较和分析,希望能...
  • 关于 fork 和父子进程的理解  代码: #include #include main ()  {   pid_t pid;   pid=fork();   if (pid  printf("error in fork!");   else if
  • 关于进程、线程和轻量级进程的一些笔记 [维基百科-轻量级进程]https://en.wikipedia.org/wiki/Light-weight_process#See_also 线程与进程概念在现代操作系统进程支持多线程。 进程是资源管理的最小单元; ...
  • Linux 进程必知必会

    千次阅读 2020-07-10 08:58:31
    上一篇文章只是简单的描述了一下 Linux 基本概念,通过几个例子来说明 Linux 基本应用程序,然后以 Linux 基本内核构造来结尾。那么本篇文章我们就深入理解一下 Linux ...探讨的进程模型非常相似。每个进程都会运行一
  • LINUX父进程与子进程的理解

    千次阅读 2020-02-10 17:06:44
    在UNIX里,除了进程0以外的所有进程都是由其他进程使用系统调用fork创建的,这里调用fork创建新进程进程即为父进程,而相对应的为其创建出的进程则为子进程,因而除了进程0以外的进程都只有一个父进程,但一个进程...
  • linux进程调度

    千次阅读 2014-11-03 09:12:27
    如果每次只运行一个进程,一是其它进程得不到及时的响应,二是CPU时间不能得到充分利用。进程调度就是要解决诸如此类的一些问题,将CPU资源合理地分配给各个进程。同时调度过程又需要对各个进程不可见,在每个进程...
  • 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,636
精华内容 13,054
关键字:

关于进程的说法中正确的是