操作系统课程设计PPT学习教案
在本节课程中,我们将学习操作系统的基本概念和系统调用。操作系统是计算机系统的核心,负责管理计算机的硬件资源和软件资源。操作系统的主要功能包括进程管理、存储管理、文件管理和设备管理等。
一、编辑和编译
在 Linux 环境中,我们可以使用 vi 或其他 IDE 集成开发环境来编辑源代码。编译时,我们可以使用 gcc 命令来编译源代码,例如 `gcc -o abc abc.c`。如果我们想要添加调试信息,可以使用 `-g` 选项,例如 `gcc -g -o abc abc.c`。
二、调试
在 Linux 环境中,我们可以使用 gdb 调试工具来调试我们的程序。使用 gdb,我们可以设置断点、显示变量值、单步执行程序等。例如,我们可以使用 `break` 命令设置断点,使用 `print` 命令显示变量值,使用 `next` 命令单步执行程序。
三、系统调用
操作系统提供了各种系统调用来实现不同的功能。常用的系统调用包括设备管理、文件管理、进程控制、进程通信和存储管理等。
* 设备管理: ioctrl()
* 文件管理: open(), close(), read(), write()
* 进程控制: fork(), wait(), getpid(), exec()
* 进程通信: signal(), kill()
* 存储管理: memset()
四、文件系统相关系统调用
在 Linux 系统中,我们可以使用打开 `/proc/sys/fs/file-max` 文件来获得操作系统最大可打开文件句柄数。
五、实习用文件系统相关系统调用
在实验中,我们可以通过分析 Linux 的 fork 和 exec 等代码来了解操作系统进程的创建和执行过程。我们可以使用 `task_struct` 结构体来描述进程的状态,例如:
```c
struct task_struct {
volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */
unsigned long flags;
...
int has_cpu;
int processor;
int last_processor;
int lock_depth;
struct task_struct *next_task, *prev_task;
struct task_struct *next_run, *prev_run;
pid_t pid;
struct task_struct *p_opptr, *p_pptr, *p_cptr, *p_ysptr, *p_osptr;
struct task_struct *pidhash_next;
struct task_struct pidhash_pprev;
...
}
```
六、进程的六种状态
在 Linux 系统中,进程可以处于六种状态:
* TASK_RUNNING
* TASK_INTERRUPTIBLE
* TASK_UNINTERRUPTIBLE
* TASK_ZOMBIE
* TASK_STOPPED
* TASK_SWAPPING
七、do_fork 和 do_execve 流程框图
在实验中,我们可以绘制 do_fork 和 do_execve 的流程框图来了解进程的创建和执行过程。
八、Fork() 实例
在实验中,我们可以使用 Fork() 函数来创建新的进程,例如:
```c
#include<stdio.h>
main(){
int getpid(),getppid(),pid;
puts("Before fork .");
printf("The parent pid of process %d is %d\n",getpid(),getppid());
if((pid=fork())==-1) exit(1);
else if(pid==0) {
puts("child process after fork");
printf("The parent pid of process %d is %d\n",getpid(),getppid());
exit(1);
} else {
wait();
puts("parent ");
}
}
```
本节课程中,我们学习了操作系统的基本概念和系统调用,并通过实验了解了进程的创建和执行过程。