Linux:进程管理&进程加载

本文详细介绍了操作系统中的进程管理,包括进程的创建、结束、状态转换以及简单的分页内存管理。此外,还探讨了操作系统的演变历程,从串行处理到实时系统。主函数参数的使用、输出缓冲区的刷新和atexit函数也在文中得到阐述,帮助读者理解C程序的执行流程和控制机制。
摘要由CSDN通过智能技术生成


1 进程管理

  • 进程:一组有序指令+数据+资源的集合(运行中的程序)
  • 操作系统,通过PCB(进程控制块)记录,进程的相关属性(PID、PPID、优先级、程序计数器EIP、程序上下文等)

1.2 进程的创建

  • 先分配PCB结构,再生成进程主体

1.3 进程的结束

  • 先释放进程主体,再释放PCB结构
    (僵死进程:进程主体释放,PCB未释放)

1.4 进程的状态

  • 运行:CPU正在执行进程中的指令
  • 就绪:等待CPU执行
  • 阻塞:等待I/O事件的发生

运行中的进程时间片用完–>转为就绪


2 进程加载

  • 简单分页(充分利用内存)
    • 将内存分为区块,即一个页4K,称为页帧。
    • 进程加载时,将磁盘上的程序分别按页面加载到内存上(页面可连续可不连续)
    • 操作系统,通过进程的页表,记录程序和内存之间页面的映射。
    • 通过程序中存储的逻辑地址及偏移量,计算数据的真实物理地址(偏移量不变)

3 操作系统的发展

  • 串行处理:按顺序依次提交处理
  • 批处理:统一提交处理
  • 多道程序设计:统一提交同时处理,按状态交替
  • 分时:分时间片同时处理
  • 实时:即时响应,快速处理

4 主函数传参

int main(int argc, char* argv[], char* envp[]);
//argc: 参数列表中参数的个数
//argv: 参数列表
//envp: 环境变量

主函数默认传递一个参数:执行命令

4.1 查看传递的参数

#include<stdio.h>
#include<stdlib.h>

int main(int argc, char* argv[], char* envp[])
{
    int i = 0;
    for(;i < argc ;i++)
    {
        printf("%s\n", argv[i]);
    }

    i = 0;
    while(envp[i]!=NULL)//环境变量参数以空位结尾
    {
        printf("%s\n", envp[i]);
	i++;
    }

    exit(0);
}

4.2 输出缓冲区刷新

  • 1 程序结束
  • 2 遇到 " \n "
  • 3 缓冲区满(默认1024字节)
  • 4 主动刷新:fflush(stdout);
#include<stdio.h>
#include<stdlib.h>

int main()
{
    printf("hello");//写入缓冲区
    sleep(5);//睡眠
    printf("world\n");//写入缓冲区,然后输出

    exit(0);
}
#include<stdio.h>
#include<stdlib.h>

int main()
{
    printf("hello\n");//写入缓冲区,然后输出
    sleep(5);//睡眠
    printf("world\n");//写入缓冲区,然后输出

    exit(0);
}
#include<stdio.h>
#include<stdlib.h>

int main()
{
    printf("hello");//写入缓冲区
    sleep(5);//睡眠
    printf("world");//写入缓冲区

    exit(0);//程序结束,刷新缓冲区,输出
  //_exit(0);//程序结束,不会刷新缓冲区
}

4.3 atexit函数

atexit(void(*)());//程序退出时,注册一个退出函数
#include<stdio.h>
#include<stdlib.h>

void fun1()
{
    printf("fun1\n");
}

void fun2()
{
    printf("fun2\n");
}

int main()
{
    atexit(fun1);
    atexit(fun2);
	
    printf("hello world\n");
	
    exit(0);//输出顺序:hello world,fun2,fun1
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值