想过如何设计进程的数据结构吗?

今天同学去面Nortel,被问及一个问题,也是一个流传的老问题:如果让你来设计操作系统,你会怎么设计进程的数据结构?

借鉴一下linux的设计思想吧:

在linux的内核的实现中,有一些数据结构使用频度较高,他们是:

task_struct.

进程调度是Linux操作系统的核心,它对整个操作系统的执行效率至关重要.进程调度控制着进程对CPU的访问,Linux 内核利用一个数据结构(task_struct)代表一个进程,task_struct容纳了一个进程的所有信息,是系统对进程进行控制的唯一手段;
代表进程的数据结构指针形成了一个task数组(Linux中,任务和进程是相同的术语),这种指针数组有时也称为指针向量。这个数组的大小由NR_TASKS(默认为512),表明Linux系统中最多能同时运行的进程数目。当建立新进程的时候,Linux为新进程分配一个task_struct结构,然后将指针保存在task数组中。调度程序一直维护着一个current指针,他指向当前正在运行的进程。

Mm_struct

每个进程的虚拟内存由一个mm_struct结构来代表,该结构实际上包含了当前执行映像的有关信息,并且包含了一组指向vm_area_struct结构的指针,vm_area_struct结构描述了虚拟内存的一个区域。

Inode

虚拟文件系统(VFS)中的文件、目录等均由对应的索引节点(inode)代表。每个VFS索引节点中的内容由文件系统专属的例程提供。VFS索引节点只存在于内核内存中,实际保存于VFS的索引节点高速缓存中。如果两个进程用相同的进程打开,则可以共享inade的数据结构,这种共享是通过两个进程中数据块指向相同的inode完成。

你可能感兴趣的:(找工日志,数据结构,Linux)