【1】什么是进程?

  进程是一个正在运行的程序。

【2】pcb是什么?有什么作用?

  pcb是进程控制块,他包含了进程各种信息,是一个数据结构类型。系统可以根据PCB来实现对进程的控制和管理,PCB是进程唯一的标志。

【3】内存的分页管理,页表是什么?在程序中我们使用的是逻辑地址还是物理地址?引入虚拟内存后对程序的执行有什么影响?

  页表是为了实现地址映射而实现的,能在内存中找到每个页面所对应的物理块。逻辑地址。更安全,可以加快电脑的运行速度

【4】在程序中malloc申请1G内存能不能成功?判断依据是什么?

  能,因为内存中malloc申请的空间在堆上,对向上开辟,用户空间最大为3G,除去栈等等还有2G空间,完全够malloc1G内存大小。

在Linux上测试了一下,malloc1.9G==》成功  malloc2.0G==》失败           malloc1.5G   +malloc1.0G ==成功。当连续申请两G时失败,分两次申请可以成功。

【5】分时系统的特点,知道什么是时间片?并发和并行的区别在哪?

  分时系统具有多路性,交互性,独占性和及时性的特点。

多路性:宏观上是多个人同时使用一个CPU,微观上是多个人轮流在不同的时刻使用CPU

交互性:用户根据系统响应结果进一步提出新的要求(用户直接干预每一步)

独占性:用户感觉不到计算机为其他人服务,只能感觉自己在是用整个系统

及时性:系统对用户提出的请求及时响应

并发:每个程序轮流占用cpu去运行。并行:同时

【6】程序的状态:就绪,运行,阻塞

【7】什么是僵死进程?僵死进程产生的条件?如何避免僵死进程?

  子进程结束,父进程没有结束,父进程无法得到子进程的退出码,子进程的文件描述符将一直存在,而且kill -9 无法杀死该进程,所以子进程就成为了僵死进程

1.父进程忽略SIGCLD信号;2.父进程捕捉SIGCLD信号,在信号处理函数中获取子进程退出状态。

【8】描述fork的复制流程,并描述写时拷贝技术及如何实现?

  fork-->  1.复制pcb。2.复制实体。(集体流程日后再说)

写时拷贝技术:

  在fork之后exec之前两个进程用的是相同的物理空间(内存区),子进程的代码段、数据段、堆栈都是指向父进程的物理空间,也就是说,两者的虚拟空间不同,但其对应的物理空间是同一个。当父子进程中有更改相应段的行为发生时,再为子进程相应的段分配物理空间,如果不是因为exec,内核会给子进程的数据段、堆栈段分配相应的物理空间(至此两者有各自的进程空间,互不影响),而代码段继续共享父进程的物理空间(两者的代码完全相同)。而如果是因为exec,由于两者执行的代码不同,子进程的代码段也会分配单独的物理空间。   

【9】什么是系统调用,他和库函数的区别是什么?执行系统调用后如何从用户空间切换到内核空间?

  在用户态的时候将系统调用号存到寄存器中,通过中断,切换到内核状态,操作系统先将寄存器中的系统调用号读取出来,然后通过系统调用表(sys_call_table)中去寻找相应的函数实现,然后将结果写入寄存器中返回给用户。

  系统调用要通过中断去执行内核中的相关函数,而库函数则是直接给用户去使用,不需要经过内核处理。

  用户态与内核态的切换通过中断实现(80号中断)。

【10】信号是什么?信号在内核如何表示及实现?

  信号的响应方式:signal()  (改变信号的相应方式)                                             信号的发送方式:kill ( )

          1.SIG_DFL    默认                                                               SIGCHLD      子进程结束发送给父进程

          2.SIG_IGN    忽略                                                                 SIGINT  2        Ctrl + c                                                              

          3.fun            自定义                                                                15   :默认kill          kill    -9       不允许改变响应方式

          信号的实现方式:一个long类型的长整型            32位

                            00100000  00000000  00000000  00000000

结构体:用来指向具体信号

32个元素

      0               SIG_DFL  
      15             
     16            SIG_IGN
   
      32           SIG_DFL

 

  

 

 

 

【13】守护进程的编程流程?