操作系统与进程

操作系统(os)

OS存在的目的

  • 与硬件交互,管理所有的软硬件资源
  • 为用户程序(应用程序)提供一个良好的执行环境

 OS含义图

要使用操作系统,必须经过系统调用

计算机管理本质

  1. 先描述:用struct结构体描述属性
  2. 在组织:用链表或其他的结构

进程

基本概念

程序的一个执行实例,正在执行的程序

本质:进程是由内核数据结构(PCB)和可执行程序构成的

描述进程-PCB

  • 进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。
  • 课本上称之为PCB(process control block),Linux操作系统下的PCB是: task_struct

PCB里有什么

  • 标示符:描述本进程的唯一标志pid,用来区分其他进程
  • 状态:任务状态
  • 优先级:相对于其他进程的优先级
  • 程序计数器:程序中即将被执行的下一条指令的地址
  • 内存指针
  • 上下文数据
  • I/O状态信息
  • 其他信息等

 如何获取pid(用 man getpid获取头文件)

Linux创建进程的方式

  • 命令行中直接启动进程  启动进程,本质就是创建进程,  也就是操作系统中新增一个进程,一般是有父进程创建,进程间具有父子关系
  • 通过代码创建进程

系统调用创建进程

  • fork有两个返回值,给子进程返回0,给父进程返回子进程的pid
  • fork之前,只有父进程执行代码,fork之后,父子进程都要执行后续代码,因此也会执行return命令,就会有两个不同的返回值;子进程能看见fork之前的代码,只是子进程继承了父进程的代码,也就继承了父进程的eip,eip指向fork后面的代码,因此不能从头开始执行代码
  • fork之后,以父进程为模板创建子进程的pid
  • 父子进程代码共享,数据各自开辟空间,私有一份(采用写实拷贝)
  • 父子进程一旦创建,就拥有了各自的PCB,因此可以执行不同的作业,两个进程之间互不影响,进程具有独立性进程运行之间相互独立,因此杀死父进程并不影响子进程的运行
  • 父子进程谁先执行是看操作系统的调度算法的

 

 一个进程,是能找到自己的可执行程序

  每一个进程,都有自己的工作目录

  • cwd:当前工作目录
  • 当前目录默认情况下是进程启动的目录
  • 使用chdir()能够改变当前工作目录

 怎么查看进程

1.使用系统系统调用

   获取自己的pid:getpid()

   获取父进程的pid:getppid()

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
printf("pid: %d\n", getpid());
printf("ppid: %d\n", getppid());
return 0;
}

 2.通过 /proc 系统文件夹查看

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值