pkzd之进程设计策略1 (注:文章为原创,但是因为在博客园发布被移除,所以发在这了)

首先对于任何一个操作系统, 系统内核必须应该明确一种获取进程信息的办法, pkzd所使用的是一个全局数组struct proc proc[NPROC]。

其中struct proc为进程结构的结构体, NPROC是一个用来确定当前能同时存在的进程的最大数目的宏。struct proc结构的具体代码如下:

 struct proc{
        int     p_exit;
        uint    p_stat;
        uint    p_flag;
        uint    p_sig;
        uint    p_esp;
        uint    p_lesp;
        pid_t   p_pid;
        pid_t   p_ppid;
        pid_t   p_pgrp;
        uid_t   p_uid;
        uid_t   p_ruid;
        gid_t   p_gid;
        gid_t   p_rgid;
        uint    p_cpu;
        int     p_pri;
        int     p_nice;
        time_t  p_time;
        uint    p_error;
        uint    *p_stack;
        uint    *p_pgdir;
        void    *p_wchan;
        void    *p_ttyp;
        int     p_signal[NSIG];
        void    *p_cdir;
        void    *p_rdir;
        uint    p_start;
        uint    p_end;
        uint    p_brk;
        uint    p_send;
        void    *p_ofile[NOFILE];
};

 操作系统的进程有各种各样的信息, 比如进程id, 打开的文件信息等。有的信息对内核而言不是必须的,而有的则是必须的。

我以进程id和文件描述符表为例做个对比:

  •   p_pid作为每个进程的唯一标识必须一直常驻在系统内核空间,如果设计时将其放在用户空间,那么就会存在进程的pid可能被换出到交换空间的情况,一旦如此那么内核将无法辨别进程。
  •   p_ofile为进程打开的文件描述符表, 每个进程的文件描述符表理论上不需要常驻内核空间。理由是只有当前进程才会去读写文件, 一个没有运行的进程是不会存在读取文件的情况的。
  •   进程id必须存在内核空间的理由有很多,我举一个例子:比如当前进程执行exit系统调用后内核要向当前进程的父进程发送一个信号或者唤醒正在等待子进程终止的父进程,  而如果此时父进程的p_pid已经被换出, 那么内核将无所适从。

  pkzd将进程的所有信息都存放在struct proc中,而不去区分信息是否必要常驻内核(这是一种偷懒的方式)。
  unix系统的一般设计都会将只对当前进程有用的信息(比如文件描述符表)放在用户空间中, 这个空间一般称为u区。设计u区的最重要的理由是为了节省内存, 而现如今的机器已经都有非常充裕的内存了,所以已经不需要特别明确的把所有可以放在u区的信息都放在u区,我的做法
更是直接省去了u区的实现,当然这是偷懒的。
  最后pkzd所使用的语言为c,之所以采用c而非其他语言,首先c和汇编的契合度很高(c中可以调用汇编函数,汇编中又可调用c)。最重要的理由是c对资源的有力控制,而一般的面向对象的语言并不能做到。另外使用c的理由并非是因为很多人理解的c能操控硬件(一般控制硬件的代码还是用汇编完成的,虽然也有使用c的例子),根本的理由是c不会像java这样的面向对象的语言肆意的自动分配内存而导致操作系统内核对资源的失控(个人编写系统后的见解)。

  我编写的操作系统的源代码的链接:https://sourceforge.net/projects/pkzd/

时间: 2024-10-01 17:03:12

pkzd之进程设计策略1 (注:文章为原创,但是因为在博客园发布被移除,所以发在这了)的相关文章

学习博客园发布文章

原文地址:https://www.cnblogs.com/pxxtools/p/10550604.html

吉特仓库管理系统- 可恶行径我该怎么维权--51aspx.com 侵权,希望博客园不要删除此文章

工作已经累了一天了,下班之后还在想着整理吉特仓储管理系统中所遇到的打印问题,这些天写了两篇关于吉特仓储管理系统打印相关的文章,都是自己开发实施过程中遇到的实际问题想和各位分享一下.吉特仓储管理系统是本人经过多年积累开发起来的,到目前有几十家企业客户在使用中.在前不久剥离了固化的业务部分,整理出来了一个开源版本托管在了github上:https://github.com/hechenqingyuan/gitwms 供大家学习和参考. 刚准备躺下睡觉,有网友在博客中留言说自己开源的吉特仓储管理系统被

利用GitHook实现博客园文章的备份和自动发布

在使用vscode中的writecnblog插件时有所启发,链接: 用vscode写博客和发布,大家可以看看. 我们在本地可以利用git轻松实现博客园文章的历史记录管理,利用博客园的MetaWeblog API 别人的介绍编写小程序来自动化上传文章(参考插件). 更进一步,将这个程序放到githook里,每次commit时自动执行,就实现了现博客园文章的备份和自动发布. 这样,你每次发布文章的步骤就简化为: 编写本地一个Git仓库内的xx.md文件 commit更改 程序会自动获取diff,然后

利用GitHook实现博客园文章的备份和自动发布.md

在使用vscode中的writecnblog插件时有所启发,链接: [用vscode写博客和发布](https://www.cnblogs.com/caipeiyu/p/5475761.html),大家可以看看. 我们在本地可以利用git轻松实现博客园文章的历史记录管理,利用博客园的MetaWeblog API [别人的介绍](https://www.cnblogs.com/caipeiyu/p/5354341.html)编写小程序来自动化上传文章(参考插件). 更进一步,将这个程序放到gith

实用scrapy批量下载自己的博客园文章

首先,在items.py中定义几个字段用来保存网页数据(网址,标题,网页源码) 如下所示: import scrapy class MycnblogsItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() page_title = scrapy.Field() page_url = scrapy.Field() page_html = scrapy.Field() 最重要的是我

如何为自己的博客文章自动添加移动版本(目前仅支持博客园)

前言 从2005年开始撰写第一篇技术博客,我也算是国内最早的一批技术博客作者之一了.其中中断过一段时间,但2008年重新启用之后,这个习惯一直保留到现在,目前已经累积的文章数量已经达到1226篇.这些文章绝大部分都是原创的,转载的有特别注明,文章内容大多是自己实际工作中遇到的问题和解决方案,或者我为企业做顾问服务.培训服务时解决的问题,我尤其喜欢在解决问题后做一点总结,并整理成一篇博客文章分享出来,一来是对思路的重新梳理,同时也希望也许日后能对其他人也有所帮助. 这些年随着移动互联网逐渐占据主流

超强PCB布线设计经验谈附原理图(转自电子工程专辑亿万家园博客)

在当今激烈竞争的电池供电 市场中,由于成本指标限制,设计人员常常使用双面板.尽管多层板(4层.6层及8层)方案在尺寸.噪声和性能方面具有明显优势,成本压力却促使工程师们重新考虑其布线策略,采用双面板.在本文中,我们将讨论自动布线功能的正确使用和错误使用,有无地平面时电流回路的设计策略,以及对双面板元件布局的建议. 自动布线的优缺点以及模拟电路布线的注意事项设计PCB时,往往很想使用自动布线.通常,纯数字的电路板(尤其信号电平比较低,电路密度比较小时)采用自动布线是没有问题的.但是,在设计模拟.混

在Web微信应用中使用博客园RSS以及Quartz.NET实现博客文章内容的定期推送功能

本篇随笔介绍在Web微信应用中使用博客园RSS以及Quartz.NET实现博客文章内容的定期推送功能,首先对Quartz.NET进行一个简单的介绍和代码分析,掌握对作业调度的处理,然后对博客园RSS内容的处理如何获取,并结合微信消息的群发接口进行内容的发送,从而构建了一个在Web应用中利用作业调度来进行消息发送的业务模型. Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等. Quartz.NET允许开发人员根据时间间隔(或天)

十年,站酷已成设计论坛霸主,博客园却成无兵之将

他山之石--邂逅站酷 虽然才毕业一年,似乎在很多人眼里这年龄只是个小屁孩的角色.但不知不觉,已经离刚上大学的时候有五年之多了,那时候因为专业的原因还是个美工,边学边做在社团组织里捣鼓一些海报和宣传视频.经同学推荐,有个叫做站酷的网站,好多高质量素材,矢量图任意缩放,不是有些图库的那些半模糊还有水印的战五渣,你懂的.后来因为感觉天份的原因,也没有什么美术功底,就放弃了继续设计师这一类行业.但是身边很多朋友都在做设计,江湖一直都在,站酷的名字从未停息. 他最近出了个叫做"高高手"的在线教育