自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 资源 (1)
  • 收藏
  • 关注

原创 Lenix多任务演示

#include #include #define USER_APP_STACK 512byte_t app_stack1[USER_APP_STACK];byte_t app_stack2[USER_APP_STACK];byte_t

2011-12-31 22:53:27 611

原创 进程调度(草稿)

进程调度的起因。这是由于多道程序设计出现后,才出现的问题。在单任务操作系统中,并不存在进程调度。也就是说只有在多任务的操作系统中才会出现进程调度的问题。这是由于系统中同时存在多个处于运行态的进程,而系统中并不能保证为每个进程分配一个CPU,这个时候就要有选择性的确定哪些进程可以运行。进程调度需要考虑的问题。1、进程的重要性。负责处理重要工作的进程,需要获得更多的运行机会,甚至于在工作完

2011-12-21 09:06:24 415

原创 Lenix固定长度内存分配源代码分析(草稿)

Lenix在给定的内存块中划分出两个部分1、内存块对象区域。这部分用来将内存块构造成一个单向链表。这个属于管理空间,属于消耗空间。这个结构由于对象与存储空间分离,因此在存储空间出现了写越界,并不会造成管理结构的崩溃,可以保证系统正常运行。2、内存块区域。实际可分配的空间这里形成一个对应关系,可以从内存地址计算出内存块对象的地址。在分配的时候,只需要从空闲队列中取出一个内存块,并返回

2011-12-21 08:58:09 706

原创 内存管理(草稿)

内存管理是为了有效地利用内存。最理想的情况是,需要使用的内存都提前分配好,这样就省略了内存管理这一步,简化了工作,也能提高程序的运行效率。但实际上这是不可能的,从硬件角度来说,程序运行的硬件环境可能不同,配置的内存不同。从软件角度来说,所需要的内存可能远远大于物理内存。这就决定了不可能提前分配好所有的内存。从利用率来看,提前分配好所有内存是一个极大的浪费。内存的分配实际上是在一块较大的、连

2011-12-21 08:57:54 416

原创 通过关中断的方式来实现原语的分析

原语是指几个(2个及以上)连续执行,同时不能被打断的操作。打断这些连续的操作,有两种可能。一种是主动的,一种是被动的。主动的打断是指程序主动进入睡眠,而出现的操作中断。被动是指在操作期间发生外部中断,CPU转去响应中断,而在中断处理过程中,有可能使高优先级的进程进入运行态,如果是抢占式内核,就会导致任务切换,也就形成了操作中断。例如在执行过程中,硬盘操作完成,发出中断,硬盘的中断处理程

2011-12-19 09:40:56 3062

原创 Proc_sleep源代码分析

Proc_sleep程序是Lenix进程状态控制程序中的一个,与其对应的是Proc_wakeup程序。其代码void Proc_sleep(void){ if( proc_current == proc_lenix ) Sys_halt("Lenix try to sleep."); proc_current->proc_s

2011-12-18 16:48:56 871

原创 Lenix消息机制源代码分析

对象定义及操作接口typedef struct _msg_slot_t{ uint32_t ms_pid; /* 发送进程id */ uint32_t ms_type; /* 消息类型

2011-12-16 15:06:37 435

原创 进程间通信

进程间通信(IPC)是指两个以上的进程之间传递数据。前面提到的同步问题实际上就属于进程间通信的问题,只是其数据量很小。进程间通信的数据量有大有小,根据不同的数据量,各种操作系统都会提供与其相适应的方法。常见的方法有消息、邮箱、管道、共享内存、共享文件等等。其中消息、邮箱、管道都属于先进先出工作方式,而共享内存、共享文件则可以随机访问。同步机制的实现大多是采用共享内存的方式。进程间通信都会涉及同

2011-12-15 09:12:01 635

原创 回头看进程的创建

这个时候回头看进程的创建,在进程池中查找空闲的进程对象时,就属于一个临界段代码,并没有任何的约束,所以这时存在很大的隐患的。现在利用锁机制对其进行改写,有了锁的保护,还可以同时加入pid生成代码。proc_t * Proc_create(const char * name,void * entry,void * param,void * stack){ static uint3

2011-12-14 14:58:01 369

原创 进程同步:问题的解决,原语

在出现了同步问题后,如何解决呢?可以在访问公共变量的时候,设置一个锁变量,这个锁变量有两个状态,一个是上锁的状态,另一个是释放状态,如果锁变量没有上锁,则可以访问变量,同时将锁置为上锁状态。待访问变量结束后,将锁置为释放状态,允许下一个进程访问变量。示例的程序如下:int lock = 0;int cnt = 0;int app1(void){ int

2011-12-14 13:25:12 918

原创 进程同步,问题的引入

当系统存在多个进程对同一个变量进行访问时,就会出现进程同步问题。这里先利用Lenix来制造出一个因为同步问题而出现错误的情况。原始的代码是int cnt = 0;int app1(void){ int tmp; printf("app1 count:%d\n",cnt); tmp = cnt + 1; printf("a

2011-12-14 12:09:08 413

原创 进程管理测试(1)

有了之前的了解,可以对进程管理进行一个测试。在测试之前,还需要做一些准备工作。首先,需要增加一个刷新调度因子的程序,如果没有这个程序,调度因子将一直为0。void Proc_alarm(void){ int i; for( i = 1 ; i < PROC_MAX ; i++) { if( !proc_pool[i].pro

2011-12-14 09:57:41 702

原创 Lenix进程管理源代码分析(第一阶段)

由于进程会随着功能的增加而变大,也会导致进程管理行为发生变化。要说明进程管理,并不是功能越多越好,而应该在具备基本功能的最小集合下进行,如果有太多的其他内容,反而会造成理解上的困难。首先,Lenix定义了一个全局进程数组,这个数组就是用来分配进程对象的,也就是PCBproc_t * proc_current;static proc_t

2011-12-14 09:27:02 557

原创 进程管理

进程管理主要是完成进程的创建、退出、状态的转换、进程切换1、进程的创建。进程的创建主要完成几个任务,从创建进程对象开始,也就是为PCB分配内存,然后分配相应的资源,例如内存、IO设备等,分配好资源后,如果程序处于外存,还要将程序从外存读入,这个过程可以称为装载,装载完成后,初始化进程的运行环境,例如各个寄存器的初始值,然后根据初始状态设置PCB,最后将进程放入调度队列中,等待调度。2、进程

2011-12-14 08:13:00 327

原创 如何表示进程?

进程是操作系统中最重要的概念,但是进程如何表示?通常的操作系统书籍都用了一个词:进程控制块,简称:PCB。也就是在一块连续的内存中包含了进程的各种信息。这些信息通常包含1、标识信息。主要是用于识别进程,常见的有进程名,进程id,用户id等等。2、调度信息。像栈指针,CPU时间、进程状态和一些调度相关参数。3、资源信息。例如打开的文件列表、已经打开的内核对象列表等。4、各类统计信息。

2011-12-13 17:36:49 976

原创 进程

进程这个词,相信大多数人并不陌生。在用windows的时候,经常会打开任务管理器,里面就有一个选项卡是进程。在一般的概念中,运行一个程序,就会有一个对应的进程。基本上就将进程等同于程序。这是一般人对于进程的理解,如果要学习操作系统,就要有更全面、准确的认识。 进程是操作系统中最重要的概念,可以说进程是现代操作系统的核心。对于进程的概念,现在有众多的说法,但可以说,都没有办法让人很好

2011-12-13 16:55:37 414

原创 基础3:硬件编程

这部分内容是Lenix基础的最后一部分,就是硬件知识。但是由于Lenix是学习用的,所涉及的硬件不多,只需要用到8259中断控制器、时钟、键盘。这部分内容这里就不细讲,在书上会说明。由于C语言并没有提供直接操作端口的方式,因此Lenix设计了两个程序,用于完成端口的IO; byte_t Io_inb(word_t port)_Io_inb: mov bx,sp xor ax,ax

2011-12-13 15:26:37 823

原创 基础2:中断处理

响应中断是操作系统最重要的任务之一,所以要写操作系统,就要知道如何设置中断处理程序,以及中断处理程序的编写。x86CPU在实模式下,中断是通过中断向量表来转发的,这个中断向量表是固定在物理地址0 - 3FF处。大致来说,就是x86CPU可以处理256个中断,每个中断的中断处理程序用四个字节表示,因此总共占用1K个字节。具体的细节就不再这里写了。这里主要是讲怎么进行中断处理。第一步:设置

2011-12-13 12:10:27 470

原创 所需的基础知识

这里是我需要写的    《操作系统原理及实践》的草稿,只是一个框架,会有一些省略的地方,比如图表,文字也是一些大纲性质的,并没做很细致的说明,但是代码是可以保证的,代码分析相对简单,为什么这么做的说明也是一个提示性的文字,这些会在后面进行补充。如果有心学,并没有太大的困难。=============================================================

2011-12-13 09:27:33 534

原创 我带徒弟的方式。

很多人在学编程的时候,总会希望有个人带,如果没人带,也就踏上了自学的道路。虽然,最终的修行是靠个人,但是如果有人带,路将会好走很多,少走很多弯路。这个有人带的说法,我是指类似师傅带徒弟的方式,就其形式来说,也就是一个人带2、3个,顶多带4、5个人。如果要参加那种培训班式的,一个班里有2、30个人,甚至多到4、50个人的,还不如自学呢。    学编程,如果不是因为兴趣,那自然是想找一份好工作,但

2011-12-12 17:41:37 1188 6

原创 中国有创新能力吗?

前些天看到一个说中国创新能力的文章,自己也有一点想法。写下来。1、竞争环境不是不够激烈,而是到了惨烈的地步,进而演化为恶性竞争。过于激烈的竞争导致利润微薄,无法支撑高昂的创新成本,唯一的办法就是扩大生产规模来获得基本的利润,哪里还有创新的资本。2、没有真正的创新意识。虽然知识产权保护不力影响了创新,但根本原因是中国并没有真正的创新思维,真正的创新是要从基础研究做起的,而国内的创新大多是把比

2011-11-25 11:28:15 849

原创 领导重视是不是好事?

绝大多数人都认为必须要领导重视是好事,这样才能快速推进工作。但我认为不是好事,甚至是阻碍发展的绊脚石。要靠领导重视才能推进工作的机制,最后的结果必定是70%的工作没法做,90%的工作做不好,所做的工作100%没有生命力。这听起来让人很不舒服,怎么重视了还不好了?领导也是人,不可能全才,也就注定了领导不可能重视很多事情,也注定了领导只能关注他知识范围内认为是重点的事情,按照2-8原则,能关注20

2011-11-22 11:24:50 794

原创 关于io指令的问题

p = (uint16_t)ata->ata_io_base + 2; addr = (byte_t *)(&aa.aa_low); outb(p++,(byte_t)(0xFF & (byte_t)sn)); outb(p++,*addr++); outb(p++,*addr++); outb(p++,*addr++); outb

2011-11-08 08:26:00 1449 1

原创 SHEMOX在PC环境下的启动过程。

1、开机后,BIOS将硬盘启动扇区读入0000:7C00处,然后跳转至0000:7C00处执行引导程序。引导程序将自身复制到0000:7E00处,然后查找分区表,将活动分区的引导扇区读入0000:7C00处,然后跳转到0000:7C00处执行分区的引导程序。也就是说,SHEMOX提供的硬盘引导程序仅仅是完成一个查找活动分区并且读活动分区的引导扇区的工作。2、分区的引导程序将分区引导扇区后指

2011-10-30 21:08:05 417

原创 SHEMOX的结构

SHEMOX的层次结构非常清晰,因此也具备非常优秀的可剪裁性。SHEMOX的系统结构分为以下8层:    0层:也就是最底层。称为体系结构层,也就是CPU相关。SHEMOX在这一层提供CPU相关的操作接口,例如提供io接口、设置中断处理程序的接口。如果CPU包含有MMU,则MMU也在该层。该层是移植的一个重点。    1层:目标机器层。该层建立在体系结构层之上,用来实现具体目标机器中设备的

2011-10-30 11:46:50 539

原创 SHEMOX操作系统-简介

SHEMOX操作系统       系统目前已经支持进程管理、进程同步、进程间通信、设备管理、文件系统、动态链接库、SHELL功能。已经具备了操作系统基本功能,拥有良好的扩展性。GUI和TCP已经进入开发阶段。   SHEMOX是一款具备完全自主知识产权的操作系统,没有采用任何开源项目的代码,开发工具采用VC,没有汇编文件。使用VPC2007进行测试。   版本号目前未定,待到大致稳

2011-10-24 12:12:04 1736 5

SHEMOX操作系统学习版

1、SHEMOX是一款主要面向嵌入式应用的操作系统。 2、学生版是SHEMOX的简化版,便于有兴趣的人快速了解SHEMOX的结构。学生版SHEMOX包含的内容有:开机引导、保护模式初始化、开分页、进程调度及管理、固定内存分配支持。可以方便的进行扩展。

2011-10-20

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除