并发执行和并行执行

并发执行:多个进程在使用同一个cpu,每个进程都独占cpu一会,然后让出cpu资源,供其他进程执行
并行执行:多个进程,在同一时刻,每个家进程都有一个cpu进行运算。

程序是如何变成进程的?
涉及到冯诺依曼体系,首先在输入设备执行完成后,OS要让磁盘上一个可执行格式(不是可执行权限)程序运行起来,第一件事就是(load)程序的相关代码以及静态数据(例如以初始化的变量)到内存中(具体的是到自己的虚拟内存地址空间),当代码和静态数据已经装载到内存后,OS还需要为将要运行的程序做一些额外的操作,比如为该进程分配一些内存;创建一些数据结构;初始化与IO相关的一些任务(比如Unix系统中,设置好每个进程都关联的3个文件描述符:stdout、stdin、stderr),等等。
完成相关操作后,会对源码进行一系列操作(C语言中编译,链接等)编程可执行文件,,shell会生成一个子shell进程(fork)。子进程通过execve系统调用启动加载器。加载器删除子进程现有的虚拟存储器段,在可执行文件(ELF)中段头部表的指导下,创建并初始化一组新的代码,数据,栈和堆段。新的栈和堆被初始化为零,通过虚拟地址空间中的页映射到可执行文件的页大小的片,新的代码和数据段被初始化为可执行文件的内容。最后加载器跳转到ctrl.o初执行程序的初始化工作,然后是进入main函数开始应用程序的执行–>程序就是这样变成了进程。在加载器的帮助下,程序跑进了一个进程中,然后开始了自己的进程路。
gdb调试的时候查看汇编指令

disassemble

1:进程在执行的时候,进程会执行切换,切换是操作系统调度的;
2:在被切换出去的时候,该进程当中的程序计数器会保存程序执行的下一条指令,上下文信息会保存寄存器当中的值;
3:再次切换回来的时候,通过程序计数器和上下文信息来恢复之前的场景继续运算。

查看进程所占用文件

ll /proc/[PID]/fd  
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值