综合能力训练:在树莓派上动手写一个小OS(6):实验16-5:进程创建实验

本文介绍了在树莓派上动手编写操作系统过程中关于进程创建的实验,涉及进程控制块的设计、内核栈分配、do_fork函数实现、进程上下文切换以及新进程的首次执行流程。实验要求实现fork函数,创建一个不断输出数字的进程,并提供了实验步骤和参考代码。
摘要由CSDN通过智能技术生成

本文节选自《实验指导手册》第二版第16.7章
实验指导手册是奔跑吧Linux内核入门篇第二版配套实验书,pdf版本已经release,可以免费下载和自由打印!
下载方法:
登陆“奔跑吧linux社区”微信公众号,输入“奔跑吧2”获取下载地址。

本文是《奔跑吧Linux内核 入门篇》第二版中第16章的实验16-5:进程实验。我们在前面的实验中已经完成了printk打印函数以及时钟中断的实验了,接下来我们就可以来完成进程创建的实验了。在本实验里,我们要研究进程是如何创建的,了解新创建的进程是如何执行的。在这个实验里,我们要完成fork()函数,看看传说中的fork函数究竟是如何实现的。

实验指导手册 打印小Tips:

大家可以在某宝上随便找一个便宜的打印店,打印B5+黑白即可!很便宜,20~30元,还包邮!

1.实验目的

(1)了解进程控制块的设计与实现。
(2)了解进程的创建/执行过程。

2.实验要求

实现fork函数以创建一个进程,该进程一直输出数字“12345”。

3.实验提示

(1)设计进程控制块。
(2)为进程控制块分配资源。
(3)设计和实现fork函数。
(4)为新进程分配栈空间。
(5)看看新创建的进程是如何运行的。

4.实验详解

4.1 进程控制块PCB

我们使用struct task_struct数据结构来描述一个进程控制块。

struct task_struct {
    enum task_state state;
    enum task_flags flags;
    long count;
    int priority;
    int pid;
    struct cpu_context cpu_context;
};

State:表示进程的状态。使用enum task_state枚举类型来列举出进程的状态,有运行状态TASK_RUNNING、可中断睡眠状态TASK_INTERRUPTIBLE、不可中断的睡眠状态TASK_UNINTERRUPTIBLE、僵尸态TASK_ZOMBIE以及终止态TASK_STOPPED。

enum task_state {
    TASK_RUNNING = 0,
    TASK_INTERRUPTIBLE = 1,
    TASK_UNINTERRUPTIBLE = 2,
    TASK_ZOMBIE = 3,
    TASK_STOPPED = 4,
};

Flags用来表示进程的某些标志位。目前只用来表示进程是否为内核线程。

enum task_flags {
    PF_KTHREAD = 1 << 0,
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值