2013-05-15 20:23:20 wdzxl198 阅读数 4283
  • 初级学软件之Java语言视频课程

    Java是一种的面向对象的程序设计语言,使用Java语言编写的程序是跨平台的,从PC 机到手持电话都有Java开发的程序和游戏,Java程序可以在任何计算机、操作系统和支持Java的硬件设备上 课程内容: 第一章课程简介 第二章开发工具介绍 第三章Java语言基础 第四章Java 面向对象

    3609 人正在学习 去看看 胡延亮

硬实时操作系统-RTlinux

摘要:

介绍了RTLinux的两个重点特点:硬实时性和完备性,及其在嵌入式系统应用中的一些重要功能,并结合实时处理的具体实例对其编程方法加以说明。 

关键词:操作系统 实时处理 Linux 嵌入式系统
近年来,基于PC的嵌入式系统得到迅速的发展。在各种不同的操作系统中,由于Linux操作系统的廉价、源代码的开放性以及系统的稳定性,使其在基于PC的嵌入式系统中的应用日益广泛。RTLinux(RealTime Linux)[1]是一种基于Linux的实时操作系统,是由FSMLabs公司(Finite State Machine Labs Inc.)推出的与Linux操作系统共存的硬实时操作系统。它能够创建精确运行的符合POSIX.1b标准的实时进程;并且作为一种遵循GPL v2协议的开放软件,可以达GPL v2协议许可范围内自由地、免费地使用、修改和再发生。本文介绍了RTLinux的特点及功能,并结合一个实时处理的具体实例对其编程方法加以说明。

1 RTLinux的特点

在Linux 操作系统中,调度算法(其于最大吞吐量准则)、设备驱动、不可中断的系统调用、中断屏蔽以及虚拟内存的使用等因素,都会导致系统在时间上的不可预测性,决定了Linux操作系统不能处理硬实时任务。RTLinux为避免这些问题,在Linux内核与硬件之间增加了一个虚拟层(通常称作虚拟机),构筑了一个小的、时间上可预测的、与Linux内核分开的实时内核,使得在其中运行的实时进程满足硬实时性。并且RTLinux和Linux构成一个完备的整体,能够完成既包括实时部分又包括非实时部分的复杂任务。

1.1 硬实时性

RTLinux 将Linux源码中所有的cli、sti、iret指令分别用宏S_CLI、S_STI、S_IRET替换,引入虚拟层将截取所有的硬件中断,分割 Linux系统与硬件中断之间的直接联系。当RTLinux虚拟层接收到与实时处理有关的硬件中断时,立即启动执行相应的实时中断服务程序;而接收到与实时处理无关的中断时,先保存相应的信息,等到RTLinux内核空闲时通过软中断传递给Linux内核去处理,这样就使得RTLinux内核不受各种软、硬件中断的影响,不会造成时间上的不可预测性。同时又区别于其他实时处理方案,它并未对操作系统的内核作结构性的修改,因此并不会妨碍Linux操作系统的进一步发展和变化。
Linux采用基于最大吞吐量准则的调度策略,并不能确保各个实时进程的及时调度。而 RTLinux在缺省情况下采用优先级的调度策略,即系统调度器根据各个实时任务的优先级来确定执行的先后次序。优先级高的先执行,优先级低的后执行,这样就保证了实时进程的迅速调度。同时RTLinux也支持其它的调度策略,如最短时限最先调度(EDP)、确定周期调度(RM)(周期短的实时任务具有高的优先级)。RTLinux将任务调度器本身设计成一个可装载的内核模块,用户可以根据自己的实际需要,编写适合自己的调度算法。
操作系统精确的定时机制,可以提高任务调度器的效率,但增加CPU处理定时中断的时间开销。RTLinux采用一种折衷的方案,不将8354定时器设计成 10毫秒产生一次定时中断的固定模式,而是根据最近事件(进程)的时间需要,不断调整定时器的定时间隔。这样既可以提供高精度的时间值,又避免过多增加 CPU处理定时中断的时间开销。RTLinux系统同时将各时间间隔相加,保持一个系统全局时间变量,并使用软中断的方式来模拟传统的100Hz定时中断,将其传递给Linux系统使用。

1.2 完备性

过去,实时操作系统仅是一组原始的、简单的可执行程序,它所做的仅仅是向应用程序提供一程序库,但如今,实时应用程序通常要求能够支持TCP/IP、图形显示、文件和数据库系统及其它复杂的服务。为了满足当今实时应用程序的多种需求,通常采用在实时控制内核上增加这些服务或完全修改标准操作系统内核的方法,而RTLinux所采用的是一种新型高效的方式。将一个简单的小型实时内核与Linux内核共存,用简单的小型实时内核处理实时任务,将非实时任务交给Linux内核去处理,而 Linux内核本身也作为一个RTLinux实时内核在空闲时运行的进程。这种将实时系统和平均时间优化的标准Linux操作系统协同工作的方式,使得许多实时应用都显示出一种增效。实时内核中的实时任务可以直接访问硬件,不使用虚拟内存,给实时进程提供了很大的灵活性;运行在Linux用户空间中的非实时任务,可以方便地使用系统提供的各种资源(网络、文件系统等),并受到系统的保护,增加了系统的安全性。

2 RTLinux的主要功能

RTLinux提供了一整套对硬实时进程的支持函数集。在此,仅对在嵌入式系统中最重要的三个方面:进程间的通讯、中断和硬件设备的访问以及线程间的同步加以阐述。

2.1 进程间的通信(IPC)

RTLinux 要求将应用程序分成实时部分和非实时部分。应用程序的实时部分应该是简单的和轻负荷的,在RTLinux的实时内核中完成;而非实时部分,在Linux的用户空间完成。因此RTLinux提过了多种内核实时进程和Linux用户空间进程间的通讯机制,最重要的是实时FIFO和共享内存。
实时FIFO是能够被内核实时进程和Linux用户空间进程访问的快进快出队列,是一种单向的通讯机制,可以通过两路实时FIFO构成双向的数据交换方式。在使用实时FIFO前先要对实时FIFO通道初始化:
#include
int rtf_create(unsigned int fifo,int size)
使用后应该注销实时FIFO通道:
int rtf_destroy(unsigned int fifo)
在初始化实时FIFO通道后,RTLinux内核的实时进程和Linux用户空间的进程都可以使用标准的POSIX函数open、read、write和 close等对实时FIFO通道进行访问。内核实时进程还可以使用RTLinux的专有函数rtf_put和rtf_get对实时FIFO通道进行读写。
RTLinux共享内存由mbuff.o模块支持,可以使用下面的函数分配和释放共享内存块:
#include 
void *mbuff_alloc(const char *name,int size)
void mbuff_free(const char *name,void *mbuf)
函数mbuff_alloc有两个参数,共享内存名name和共享内存块的大小size。如果指定的内存共享名并不存在,分配成功时返回共享内存指针,访问计数置为1,分配失败时返回空指针;如果指定的内存共享名已经存在,返回该块共享内存的指针,并将访问计数值直接加1。函数mbuff_free将该块共享内存的访问计数值减1,当计数值为0时,该共享内存被释放。在实时内核模块中使用该函数时,应该将函数mbuff_alloc和mbuff_free分别放在init_module和cleanup_module模块之中。

2.2 中断和访问硬件

硬中断(实时中断)具有最低的延时,在系统内核中只有少数的实时进程使用。函数rtl_request_irq和rtl_free_irq用于安装和卸载指定硬件中断的中断服务程序。
#include
int rtl_request_irq(unsigned int irq,unsigned int (*handler)(unsigned int ,struct pt_regs *))
int rtl_free_irq(unsigned int irq)
中断驱动的线程可以使用唤醒和挂起函数:
int pthread_wakeup_np(pthread_t thread)
int pthread_suspend_np(void)
一个中断驱动的线程可以调用函数pthread_suspend_np(pthread_self())阻塞自身线程的执行,然后由中断服务函数调用函数 pthread_wakeup_np唤醒该线程的换行,直到此线程再次调用函数pthread_suspend_np(pthread_self())将自身挂起。
软中断是Linux内核常常使用的中断,它能够更安全地调用系统函数。无论如何,对于许多任务来说并不能提供硬实时性能,将会导致一定的延时。
Int rtl_get_soft_irq(void (*handler)(int,void*,struetpt_regs ),const char* devname)分配一个虚中断并安中断;void rtl_free_soft_irq(unsigned int irq)释放分配的虚中断。
RTLinux 与Linux一样通过/dev/mem设备访问物理内存,具体由模块rtl_posixio.o提供此项功能。首先应用程序应该打开/dev/mem设备,通过函数mmap对某段物理内存进行映射后,即可使用映射后的地址访问该段物理内存。应用程序只能在Linux进程中(即在应用程序的 init_module()模块中)调用mmap,在实时进程中调用mmap将会失败。另一种访问物理内存的方法是通过Linux将会失败。另一种访问物理内存的方法是通过Linux的函数ioremap(2)。RTLinux访问I/O端口的函数如下(对于x86结构):
输出一个字节到端口:
#include 
void outb(unsigned int value,unsigned short port)
void outb_p(unsigned int value,unsigned short port)
输出一个字到端口:
#include
void outw(unsigned int value,unsigned short port)
void outw_p(unsigned int value,unsigned short port)
从端口读一个字节:
#include
char inb(unsigned short port)
char inb_p(unsigned short port)
从端口读一个字:
#include
short inw(unsigned short port)
short inw_p(unsigned short port)
其中带后缀_p的函数使读写端品时有一个小的延时,这在快速的计算机访问慢速的ISA设备时是必需的。

2.3 线程同步

当多个实时线程需要访问共享资源时,如果没有一种同步机制,将破坏共享资源中数据的完整性。RTLinux提供一种简单的加锁方法mutex来控制对共享资源的存取,并支持POSIX的pthread_mutex_family函数组[3]。目前有以下函数可以使用:
pthread_mutexattr_getpshared //得到指定属性线程共享属性值;
pthread_mutexattr_setpshared //设置指定属性线程共享属性值;
pthread_mutexattr_init //初始化mutex的属性;
pthread_mutexattr_destroy //删除mutex的属性;
pthread_mutexattr_settype //设置mutex信号的类型;
pthread_mutexattr_gettype //得到mutex信号的类型;
pthread_mutex_init //按指定的属性初始化mutex;
pthread_mutex_destroy //删除给定的mutex;
pthread_mutex_lock //锁定mutex,如果mutex已被锁定,阻塞当前线程直到解锁;
prhread_untex_trylock //锁定mutex,如果mutex已被锁定,函数立即返回;
pthread_untex_unlock //解锁mutex;
互斥信号类型有PTHREAD_MUTEX_NORMAL(default POSIX mutexes)的PTHREAD_MUTEX_SPINLOCK(spinlocks)

3 RTLinux的编程实例分析

下面结合一个具体的程序parport.c[4],对RTLinux的编程特点加以说明。程序parport.c中的实时线程在并口的2、3脚(并口的数据 D0和D1)上周期输出信号1,而对应硬件中断7的实时中断服务程序将在并口的2、3脚输出信号0。连接并口的2脚和10脚(并口的确认信号线,对应于计算机的中断7),则可在并口的2、3脚上产生一个方波信号。parport.c源程序如下:
#include 
#include 
#include 
#include 
#include 
#include 
pthread_t thread;
unsigned int intr_handler(unsigned int irq,struct pt_regs *regs)  { //中断服务函数
outb(0,0x378); //输出字节0到并口数据线
rtl_hard_enable_irq(7); //使能硬件中断7
return 0;
}
void * start_routine (void *arg){ //实时线程
struct sched_param p; //定义实时线程控制参数的数据结构
p.sched_priority = 1; //设置优先级为1
pthread_setschedparam (pthread_self(),SCHED_FIFO,&p); //设置实时线程的控制参数
pthread_make_periodic_np(pthread_self(),gethrtime(),100000);
//启动周期为10ns的实时线程
while (1){
pthread_wait_np(); //实时线程挂起
outb(3,0x378); //实时线程周期执行,输出3到并口数据线
}
return 0;
}
int init_module(void) {//初始化模块
int status;
rtl_irqstate_t f; //保存当前的中断状态标志到变量f,并禁止中断
status=rtl_request_irq(7,irtr_handler); //设置硬件中断7的处理程序
rtl_printf("rtl_request_irq:%d",status); //输出的控制台
outb_p(inb_p(0x37A) 0x10,0x37A); //使能并口中断(硬件上)
rtl_hard_enable_irq(7); //使能中断7(软件上)
rtl_restore_interrupts(f); //按照变量f恢复当前的中断状态标志,并使能中断
return pthread_create (&thread,NULL,start_routine,0);
//创建实时进程thread
}
void cleanup_module(void){ //清除模块
rtl_free_irq(7); //禁止中断7
pthread_delete_np(thread); //删除实时进程thread
}
程序parport.c的make文件如下:
all:parport.o
include rtl.mk
clean:
rm -f *.0
按照如下命令对程序进行编译:
make
运行程序对采用以下命令:
modprobe rtl_sched //调入所需的处理模块
insmod parport.o //调入parport.o模块
连接并口的2脚和10脚,即可通过示波器在并口的3脚上观测到输出的方波信号。
可以看到,RTLinux的实时程序被编写成可加载的Linux内核模块,它能被动态地加入内存,不能执行Linux系统调用,模块的初始化代码对实时任务的结构作初始化,把实时任务时限、周期和释放时间等实时参数传递给RTLinux。
通过对Linux最小的改动,提供一种可靠且廉价的硬实时操作系统RTLinux。RTLinux开发者可以充分利用Linux提供的各种方便来编写任务的非实时部分,加速自己的任务进度。
2016-09-18 07:39:31 qiansg123 阅读数 942
  • 初级学软件之Java语言视频课程

    Java是一种的面向对象的程序设计语言,使用Java语言编写的程序是跨平台的,从PC 机到手持电话都有Java开发的程序和游戏,Java程序可以在任何计算机、操作系统和支持Java的硬件设备上 课程内容: 第一章课程简介 第二章开发工具介绍 第三章Java语言基础 第四章Java 面向对象

    3609 人正在学习 去看看 胡延亮

摘要: 8月,全球PC操作系统的市场份额几乎与上月持平,各版本维持稳定中略有震荡的节奏。

市场研究公司Net Applications每月都会对外公布操作系统与浏览器的市场份额统计,方便我们了解当前的PC操作系统市场分布情况以及相关趋势。

图片描述

根据Net Applications的最新数据(上图),8月Windows操作系统的总份额与上月差距不大,较上月略有回升,目前为90.52%——重回90%以上。而位居第二的Mac操作系统为7.37%,与上月基本持平。Linux略有下降,震荡回了2.11%。

图片描述

具体到各个版本来观察一下:其中,Win7较上月略有微升,目前份额为47.25%;Win10则上涨了将近两个点,目前为22.99%;老牌WinXP系统的市场份额虽然整体呈缓慢下滑的趋势,不过目前仍有9.36%,略高于市场份额为7.92%的Win8.1系统。

图片描述

考虑到目前Win7免费升级Win10的通道已经关闭,目前普通用户的个人PC操作系统版本的变更应当不会太过频繁。目前的市场份额在没有大的影响因素之际,不太可能再有大起大落这样的变化,整体蛋糕切分局面趋于稳定。

预计Win10还会有些微的上涨,但Win7的霸主地位依旧,由于游戏用户的支持,Win7想要被Win10取代尚需时日;另外,考虑到安全因素,WinXP的市场份额可能会逐渐滑落。

图片描述

从上图来看,前八强中Windows系列上榜5个:在全球操作系统排名中,Win7仍一路领先,占据近半壁江山;Win10排名第二,在微软长期力推之下达到了22.99%。Windows其他3个上榜的版本也各有特色,其中老牌WinXP仍坚挺不已,保有9.36%的市场份额,Win8.1系统也有7.92%,考虑到上市时间,从整体来看这两个版本的拥护者也不在少数。

(文/孙薇 责编/钱曙光)

2013-06-11 18:59:13 Firas 阅读数 7051
  • 初级学软件之Java语言视频课程

    Java是一种的面向对象的程序设计语言,使用Java语言编写的程序是跨平台的,从PC 机到手持电话都有Java开发的程序和游戏,Java程序可以在任何计算机、操作系统和支持Java的硬件设备上 课程内容: 第一章课程简介 第二章开发工具介绍 第三章Java语言基础 第四章Java 面向对象

    3609 人正在学习 去看看 胡延亮

更新日期:2015年3月12日

编写PC操作系统的参考资料

编译器等工具

汇编语言:

MASM 6.11,MASM 11(Windows):http://www.masm32.com/

FASM(跨平台):http://flatassembler.net/

NASM(跨平台):http://www.nasm.us/

TASM:http://turbo.brothersoft.com/turbo-assembler.html

YASM:http://yasm.tortall.net/

C语言:

Visual Studio(Windows)

C-Free 5.0(Windows,包含MinGW):http://dl.vmall.com/c0dkzg38o7

GCC,G++(跨平台):http://gcc.gnu.org/

GCC与FASM代码链接:http://board.flatassembler.net/topic.php?t=5989

GCC链接器LD脚本:http://www.math.utah.edu/docs/info/ld_3.html

 

反汇编与调试:

IDA pro(Windows)

WinDBG(Windows,包含在驱动开发工具WDK中):http://msdn.microsoft.com/en-US/windows/hardware/gg463009/

GDB(包含在GCC中)

DOS的Debug的命令:http://technet.microsoft.com/library/cc722863.aspx

代码编辑器:

Notepad++(Windows):http://notepad-plus-plus.org/

Emacs(Linux):http://www.gnu.org/software/emacs/

Vim(Linux):http://www.vim.org

汇编IDE:http://www.oby.ro/rad_asm/

二进制查看与修改:

WinHex(Windows)

ghex/khex(Linux):http://directory.fsf.org/wiki/Ghex

Oktetahttp://utils.kde.org/projects/okteta/

Hexerhttp://www.the-interweb.com/serendipity/index.php?/categories/11-Hexer

虚拟机:

VMware Station:http://www.vmware.com

Oracle Virtual Box:https://www.virtualbox.org/

压缩解压缩与虚拟机磁盘文件查看:WinMount(Windows,中文版免费):http://cn.winmount.com/

Bochs(跨平台):http://sourceforge.net/projects/bochs/?source=directory

Bochs的图形前端Peter-Bochs:https://code.google.com/p/peter-bochs/

Xen:http://xenproject.org/

 

总体

于渊《自己动手写操作系统》:http://dl.vmall.com/c0oltefkkm

于渊《Orange’s一个操作系统的实现》

川合秀实 著,周自恒、李黎明、曾祥江、张文旭 译《30天自制操作系统》

Andrew S. Tanenbaum《现代操作系统》

Abraham Silberschatz, PeterBaer Galvin, Greg Gagne《操作系统概念》:http://dl.vmall.com/c0ouk7h52g

OSDEV:http://wiki.osdev.org/Main_Page

http://www.osdever.net/tutorials/

http://www.osdever.net/papers/

https://wiki.kernel.org/index.php/Main_Page

毛德操《漫谈兼容内核》:http://ishare.iask.sina.com.cn/f/21633826.html

全FASM写成的软盘操作系统:http://MenuetOS.net/

兼容POSIX的Dynacube OS:http://www.dynacube.net/

ScorchOS:http://sourceforge.net/projects/scorchos/

MouseOS技术小站:http://www.mouseos.com/index.html

国人写的Skelix OS:http://skelix.net/skelixos/index_zh.html

http://www.walshcomptech.com/ohlandl/index.htm

Randal E. Bryant, David O'Hallaron《深入理解计算机系统》:http://dl.vmall.com/c03ppaaacv

POSIX.1-2008标准:http://pubs.opengroup.org/onlinepubs/9699919799/

 

数据结构

http://zh.wikipedia.org/wiki/红黑树

http://en.wikipedia.org/wiki/B-tree

http://en.wikipedia.org/wiki/B%2B_tree

http://en.wikipedia.org/wiki/Bx-tree

SGI STL 红黑树(Red-Black Tree)源代码分析:http://blog.chinaunix.net/uid-26818262-id-3219065.html

红黑树的插入与删除 详细整理资料:http://wenku.baidu.com/view/d07e8e0216fc700abb68fc40.html

红黑树和B树:http://www.eli.sdsu.edu/courses/fall95/cs660/notes/RedBlackTree/RedBlack.html

树堆:http://en.wikipedia.org/wiki/Treap

C++ STL:http://zh.wikipedia.org/wiki/标准模板库

 

算法

校验和:

CRC32:http://www.repairfaq.org/filipg/LINK/F_crc_v3.html

探究CRC32算法实现原理:http://blog.csdn.net/zhaodm/article/details/3711034

http://en.wikipedia.org/wiki/Cyclic_redundancy_check

哈希:

http://zh.wikipedia.org/zh-cn/MD5

http://zh.wikipedia.org/wiki/SHA家族

加密通讯:

http://en.wikipedia.org/wiki/RSA_(algorithm)

 

 

Linux参考

Linux内核源代码下载:https://www.kernel.org/

Linux内核源代码:https://github.com/torvalds/linux

《Linux内核设计的艺术——图解Linux操作系统架构设计与实现原理》:http://dl.vmall.com/c0tl4202j5

深入分析Linux内核源码:http://oss.org.cn/kernel-book/

Linux i386 Boot Code HOWTO byFeiyun Wang:http://www.tldp.org/HOWTO/Linux-i386-Boot-Code-HOWTO/index.html

毛德操、胡希明《Linux内核源代码情景分析》

Linux C编程一站式学习:http://learn.akae.cn/media/index.html

 

BSD、Unix参考

FreeBSD:

《FreeBSD操作系统设计与实现》:http://dl.vmall.com/c0ad41bvan

FreeBSD源代码:http://www.oschina.net/code/explore/freebsd

NetBSD:

NetBSD源代码:http://cvsweb.netbsd.org/bsdweb.cgi/?only_with_tag=MAIN

OpenBSD:

http://www.openbsd.org/

Apple XNU源代码:http://www.opensource.apple.com/source/xnu/

 

Microsoft的OS参考

http://research.microsoft.com/en-us/projects/singularity/

http://zh.wikipedia.org/zh-cn/Singularity

Windows Research Kernel:http://www.microsoft.com/education/facultyconnection/articles/articledetails.aspx?cid=2416&c1=en-us&c2=0

Vista及后续Windows引导启动过程:http://homepage.ntlworld.com./jonathan.deboynepollard/FGA/windows-nt-6-boot-process.html

http://www.starman.vertcomp.com/asm/mbr/W7MBR.htm

http://www.starman.vertcomp.com/asm/mbr/W7VBR.htm

ReactOS:http://www.reactos.org/

毛德操《Windows内核情景分析:采用开源代码ReactOS》

潘爱民《Windows内核原理与实现》

《DOS原理与结构》:http://dl.vmall.com/c010mlo8ay

 

CPU架构

Intel 64(x64)和IA32(x86)架构: http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html

http://software.intel.com/en-us/node/183990?wapkw=cpuid+utility

http://developer.amd.com/resources/documentation-articles/developer-guides-manuals/

Universityof San Francisco - Intel EM64T and VT Extenions:http://www.cs.usfca.edu/~cruse/cs686s07/

http://en.wikipedia.org/wiki/Cpuid

MultiProcessor Specification(MP Spec), version 1.4: http://www.intel.com/design/archives/processors/pro/docs/242016.htm

Bringing SMP to Your UPOperating System: http://www.cheesecake.org/sac/smp.html

关于多处理器初始化:http://forum.osdev.org/viewtopic.php?t=11564

x86-x64在线汇编器:https://defuse.ca/online-x86-assembler.htm

x86Microsoft stdcall调用约定:http://msdn.microsoft.com/en-us/library/zxk0tw93.aspx

Microsoftx64调用约定:http://msdn.microsoft.com/zh-cn/library/ms235286.aspx

IntelItanium(安腾)架构:http://www.intel.com/content/www/us/en/processors/itanium/itanium-processor-software-specifications.html

ARM文档:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.subset.architecture.reference/index.html

ARM模拟器:http://armulator.sourceforge.net/

SPIM MIPS模拟器:http://spimsimulator.sourceforge.net/

MARS MIPS模拟器:http://courses.missouristate.edu/KenVollmar/MARS/

MIPS架构:http://www.imgtec.com/mips/architectures/

MIPS寄存器:http://msdn.microsoft.com/zh-cn/library/ms253512(v=vs.90).aspx

AVR架构Atmel公司:http://www.atmel.com

AVR32架构手册:http://www.atmel.com/zh/cn/Images/doc32000.pdf

SPARC:http://www.sparc.org/technical-documents-test-2/specifications/#ARCH

 

进程和线程

POSIX Threads Programming:https://computing.llnl.gov/tutorials/pthreads/

 

多线程同步

Linux的自旋锁:http://blog.chinaunix.net/uid-25871104-id-3052138.html

Linux中的信号量和互斥量:http://blog.csdn.net/lihenair/article/details/6597080

 

BIOS中断

Ralf Brown实模式中断:http://www.ctyme.com/intr/int.htm

16色模式颜色对应:http://en.wikipedia.org/wiki/BIOS_color_attributes

BIOS视频、键盘、磁盘中断:http://wenku.baidu.com/view/61ed6c175f0e7cd1842536f9.html

Trusted Computing Group PCClient Implementation for Conventional BIOS:http://www.trustedcomputinggroup.org/resources/pc_client_work_group_specific_implementation_specification_for_conventional_bios_specification_version_12

 

EFI/UEFI

UEFI官网:http://www.uefi.org

Intel关于EFI和UEFI的文档:http://www.intel.cn/content/www/cn/zh/architecture-and-technology/unified-extensible-firmware-interface/efi-homepage-general-technology.html

MSDN中关于UEFI固件的文档:http://technet.microsoft.com/en-us/library/hh824898.aspx

BIOS人论坛UEFI学习讨论区:http://www.biosren.com/forum-19-1.html

《Beyond BIOS: Developing with the Unified Extensible FirmwareInterface》

System Management BIOS:http://www.dmtf.org/standards/smbios

Trusted Computing Group EFIPlatform Specification:http://www.trustedcomputinggroup.org/resources/tcg_efi_platform_specification

Trusted Computing Group EFIProtocol Specification:http://www.trustedcomputinggroup.org/resources/tcg_efi_protocol_specification

 

IO

端口:http://www.stanislavs.org/helppc/ports.html

8259AProgrammable Interrupt Controller:http://www.brokenthorn.com/Resources/OSDevPic.html

Intel 82093AAIO APIC Datasheet:http://www.intel.com/design/chipsets/datashts/290566.htm

PCI官方组织PCI-SIG:http://www.pcisig.com/

PCI规范2.2:http://www.ics.uci.edu/~harris/ics216/pci/PCI_22.pdf

PCI database:http://www.pcidatabase.com

Intel X58Express Chipset Datasheet北桥手册:http://www.intel.com/content/www/us/en/chipsets/x58-express-chipset-datasheet.html

Intel I/OController Hub 10 (ICH 10) Family Datasheet南桥手册:http://www.intel.com/content/www/us/en/io/io-controller-hub-10-family-datasheet.html

西安交通大学微机原理与接口技术:http://mcit.xjtu.edu.cn/wlkj/new_page_main.htm

中山大学微机原理与接口技术:http://sist.sysu.edu.cn/wjyl/index.html

8042键盘控制器:http://stanislavs.org/helppc/8042.html

键盘扫描码:http://www.mouseos.com/os/doc/scan_code.html

http://www.win.tue.nl/~aeb/linux/kbd/scancodes.html

MicrosoftWindows Keyboard Scan Code Specification:http://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/scancode.doc

Intel 8253PIT:http://en.wikipedia.org/wiki/Intel_8253

8254Programmable Interrupt Timer:http://ftp.utcluj.ro/pub/users/calceng/PMP/231164.pdf

提供多媒体计时器支持的指南(关于高精度计时器HPET):http://msdn.microsoft.com/zh-cn/windows/hardware/gg463347.aspx

高级配置与电源接口ACPI:http://www.acpi.info/

ACPI规范5:http://www.acpi.info/spec50.htm

USB:http://www.usb.org/developers/docs/

 

保护模式中断

PIC:http://en.wikipedia.org/wiki/Intel_8259

APIC:http://en.wikipedia.org/wiki/Advanced_Programmable_Interrupt_Controller

IA32中断研究:http://wenku.baidu.com/view/d3ada6dd5022aaea998f0f1b.html

Linux内核中断内幕:http://www.ibm.com/developerworks/cn/linux/l-cn-linuxkernelint/index.html

Linux的中断:http://www.biosren.com/viewthread.php?tid=391

调用门、中断门和陷阱门的区别:http://stackoverflow.com/questions/3425085/the-difference-between-call-gate-interrupt-gate-trap-gate

不可屏蔽中断:http://en.wikipedia.org/wiki/Non-maskable_interrupt

The x86 NMI iret problem:http://lwn.net/Articles/484932/

 

磁盘

主引导记录(MBR)数据结构:http://blog.csdn.net/firas/article/details/8665366
FAT、NTFS卷引导记录数据结构:http://blog.csdn.net/firas/article/details/8787506

http://en.wikipedia.org/wiki/Master_boot_record

硬盘知识大概:http://wenku.baidu.com/view/c17688c7bb4cf7ec4afed04d.html

关于ATA:http://www.ata-atapi.com/

负责ATA/ATAPI的技术委员会T13官方网站:http://www.t13.org/

SATA官方网站:http://www.sata-io.org/

负责SCSI的技术委员会T10官方网站:http://www.t10.org/

ATA/ATAPI 8命令集草稿:http://www.t13.org/documents/UploadedDocuments/docs2007/D1699r4a-ATA8-ACS.pdf

http://www.t13.org/documents/UploadedDocuments/docs2011/d2015r7-ATAATAPI_Command_Set_-_2_ACS-2.pdf

http://www.t13.org/Documents/UploadedDocuments/docs2013/d2161r5-ATAATAPI_Command_Set_-_3.pdf

SATA规范3.2草稿:http://www.knowledgetek.com/graphicsNew/SerialATA_Revision_3_2_Gold(with%20Links).pdf

SATA规范3.0草稿:http://www.lttconn.com/res/lttconn/pdres/201005/20100521170123066.pdf

SATA的AHCI接口规范:http://www.intel.com/content/www/us/en/io/serial-ata/ahci.html

关于保护模式读写磁盘:http://bbs.pediy.com/showthread.php?t=171927

使用DMA读写硬盘:http://occh.net/wordpress/?p=324

 

内存管理

What every programmer shouldknow about memory: http://lwn.net/Articles/250967/

吴晓勇,曾家智。操作系统内核中动态内存分配机制的研究。成都信息工程学院学报,第20卷第1期,2005年2月:27~30

徐蓉。实时系统的内存管理技术研究与实现。电子科技大学硕士学位论文,2004年

谢长生,刘志斌。Linux 2.6内存管理研究。计算机应用研究,2005年:58~60

沈勇,王志平,庞丽萍。对伙伴算法内存管理的讨论。计算机与数字工程,第32卷:40~43

伙伴算法:http://blog.csdn.net/orange_os/article/details/7392986

胡兆阳,谢余强,舒辉。Windows下堆内存管理机制研究。计算机工程与应用,2005.17:59~61

Mengxiao Liu, Weixing Ji, ZuoWang, Jiaxin Li, Xing Pu. “High Performance Memory Management for A Multi-coreArchitecture”. IEEE Ninth International Conference on Computer and InformationTechnology. 2009. pp. 63-68.

 

页面置换

http://en.wikipedia.org/wiki/Page_replacement_algorithm

 

文件系统

http://zh.wikipedia.org/wiki/FAT

http://zh.wikipedia.org/zh-cn/NTFS

http://zh.wikipedia.org/wiki/ReiserFS

http://zh.wikipedia.org/wiki/XFS

http://zh.wikipedia.org/wiki/ZFS

各种文件系统的比较:http://en.wikipedia.org/wiki/Comparison_of_file_systems

MSWIN4.1OS Boot Record:http://thestarman.pcministry.com/asm/mbr/MSWIN41.htm

Boot Record of FAT:http://home.freeuk.net/foxy2k/disk/disk3.htm

FAT32:http://wenku.baidu.com/view/add07dfc910ef12d2af9e751.html

超通俗FAT32:http://wenku.baidu.com/view/e2fb140590c69ec3d5bb7543.html

NTFS File System Overview:http://www.c-jump.com/bcc/t256t/Week04NtfsReview/index.html

The New Technology FileSystem:http://link.springer.com/content/pdf/10.1007/978-1-84628-732-9_6.pdf

NTFS:http://wenku.baidu.com/view/0a467b175f0e7cd184253652.html

NTFS文件系统:http://wenku.baidu.com/view/d26bec1ca76e58fafab00390.html

Master File Record(主文件记录):http://msdn.microsoft.com/en-us/library/bb470206(v=vs.85).aspx

Inside Win2K NTFS, Part 1: http://msdn.microsoft.com/en-us/library/ms995846.aspx

Inside Win2K NTFS, Part 2: http://windowsitpro.com/systems-management/inside-win2k-ntfs-part-2

Ext3/4磁盘布局:http://wenku.baidu.com/view/db827320192e45361066f5ad.html

Ext2和Ext3文件系统:http://wenku.baidu.com/view/72b04d7302768e9951e738b8.html

CDFS(ISO 9660):http://zh.wikipedia.org/wiki/ISO_9660

通用光盘格式(UDF):http://zh.wikipedia.org/wiki/通用光盘格式

 

可执行文件格式

ELF文件格式:http://www.sco.com/developers/devspecs/gabi41.pdf

ELF-64文件格式:http://downloads.openwatcom.org/ftp/devel/docs/elf-64-gen.pdf

PE文件格式:http://msdn.microsoft.com/library/windows/hardware/gg463125

PE文件格式详解:http://www.vckbase.com/index.php/wv/1057
http://www.vckbase.com/index.php/wv/1058

map文件介绍及使用查错:http://blog.csdn.net/mark_chan/article/details/5104952

BSS段:http://en.wikipedia.org/wiki/.bss

 

显示与显卡

VESA BIOS Extension(VBE) 3.0标准:http://www.petesqbsite.com/sections/tutorials/tuts/vbe3.pdf

最新VESA显示器时序标准(DMT_v1.0_r12p):http://wenku.baidu.com/view/e4ac87956bec0975f465e2ea.html

http://en.wikipedia.org/wiki/VESA_BIOS_Extensions

http://jelleybee.com/projects/software/pc_asm/int_10h/INT_10h_4Fxx_VESA.txt

http://www.stanford.edu/class/cs140/projects/pintos/specs/freevga/vga/crtcreg.htm

http://www.stanford.edu/class/cs140/projects/pintos/specs/freevga/vga/vga.htm

在保护模式中显示文字(需有C语言库):http://blog.csdn.net/guzhou_diaoke/article/details/8459541

GPU:

http://www.nvidia.com/object/cuda_home_new.html

http://developer.amd.com/resources/heterogeneous-computing/opencl-zone/

http://gpgpu.org/

 

图形界面

X.org:http://www.x.org/wiki/

GNOME:http://www.gnome.org/

GNOME源码:http://www.oschina.net/code/explore/gnome-2.91.3

KDE:http://www.kde.org/

KDE源码:http://www.oschina.net/code/explore/kde-4.5.4

Xfce:http://www.xfce.org

 

谢煜波《做一个支持图形界面的操作系统》

 

Unicode编码:http://www.unicode.org

International Components forUnicode:http://site.icu-project.org/home

 

字体

龚兵、张凤凌《True Type字体应用技术》五邑大学学报(自然科学版)1998年第12卷第1期第46~50页

史磊、吕强《True Type字形描述技术和TTF文件》中文信息产业化1995年第五期第54~59页

王瑜、黄源、张福炎《Windows中TrueType字形数据的存取技术》小型微型计算机系统1997年11月第18卷第11期

 

输入法

Fcitx输入法框架:https://fcitx-im.org/wiki/Fcitx

赵杨《XIM协议的原理及其实现》:http://www.ibm.com/developerworks/cn/linux/i18n/xim/xim-2/index.html

吴海辉《笔画码汉字输入法软件设计与实现》安徽大学硕士学位论文

图片文件格式

http://zh.wikipedia.org/wiki/BMP

BMP文件格式详解:http://blog.csdn.net/o_sun_o/article/details/8351037

JPEG文件编码解码详解:http://blog.csdn.net/lpt19832003/article/details/1713718

PNG文件格式详解:http://blog.csdn.net/bisword/article/details/2777121

 

2009-07-09 11:14:00 SHOUYU2 阅读数 1437
  • 初级学软件之Java语言视频课程

    Java是一种的面向对象的程序设计语言,使用Java语言编写的程序是跨平台的,从PC 机到手持电话都有Java开发的程序和游戏,Java程序可以在任何计算机、操作系统和支持Java的硬件设备上 课程内容: 第一章课程简介 第二章开发工具介绍 第三章Java语言基础 第四章Java 面向对象

    3609 人正在学习 去看看 胡延亮

奇虎董事长周鸿祎(腾讯科技摄) 腾讯科技讯 7月9日凌晨消息,针对谷歌拟推PC操作系统一事,奇虎公司董事长周鸿祎昨晚在接受腾讯科技连线时表示,谷歌在Chrome浏览器之后再推出操作系统顺理成章,不过在时机选择上却“稍微急了一些”。 Google昨日在官方博客中宣布,它正在开发它自己的电脑操作系统,预计基于该操作系统的上网本将在2010年下半年面市。 据其官方博客透露,Chrome OS系统是对Chrome网络浏览器的扩展,它是一款面向上网本电脑的开源操作系统。谷歌表示会在今年晚些时候公开其源代码。 周鸿祎认为,谷歌通过浏览器、云计算等手段,最终向PC操作系统挺进,这种策略有助于帮助谷歌避开微软的威胁。由于谷歌在传统PC领域并无任何优势,很难获得其他应用软件的支持。因此基于互联网的操作系统更能发挥谷歌的优势。 周鸿祎还向腾讯科技预测说,谷歌新操作系统肯定会集成谷歌大部分互联网应用,但其综合性能并不会很强,很难满足用户较高层次的需求。“这样的操作系统主要用于上网本,因此它很大程度上受到全球上网本市场的影响。” “在时机上,我认为谷歌还是稍微急了一些。它完全可以等谷歌手机操作系统Android的地位更巩固一些后,再向PC端进军。”周鸿祎表示。相对而言,现阶段谷歌浏览器对于微软的威胁,远远比操作系统来得更直接。(文/乐山)

2013-10-31 22:56:47 taozuihen17 阅读数 629
  • 初级学软件之Java语言视频课程

    Java是一种的面向对象的程序设计语言,使用Java语言编写的程序是跨平台的,从PC 机到手持电话都有Java开发的程序和游戏,Java程序可以在任何计算机、操作系统和支持Java的硬件设备上 课程内容: 第一章课程简介 第二章开发工具介绍 第三章Java语言基础 第四章Java 面向对象

    3609 人正在学习 去看看 胡延亮

操作系统

操作系统的四个基本元素:硬件,操作系统,应用程序,用户

批处理操作系统,分时操作系统,实时操作系统,通用操作系统,PC操作系统,网络操作系统,分布式系统

分时操作系统的特点
1. 多路调制性:即众多联机用户可以同时使
用同一台计算机;
2. 独占性:各终端用户感觉到自己独占了计
算机;
3. 交互性:用户与计算机之间可进行“会话”

分布式系统是以计算机网络为基础的计算机系统,包含多台处理机,每台处理机完成系统中指定的一部分功能。


进程管理

进程控制块PCB:
进程控制块包含了进程的描述信息、控制信息
及资源信息,是进程动态特征的集中反映。
不允许多个并发进程交叉执行的一段程序
称为临界区(Critical Section or Critical 
Region);
 临界区是由属于不同并发进程的程序段共
享公用数据或变量而引起的;
 临界区不可能用增加硬件的方法来解决。
因此,临界区也可以被称为访问公用数据
的那段程序。
死锁,指多个进程互不相让,都得不到足够
的资源,只好一直处于等待状态;
饥饿,指一个进程一直得不到资源(其他进
程可能轮流占用资源)


进程间通信:分为低级通信和高级通信
低级通信只传递状态和整数值,包括进程互斥和同步所采用的信号量,优点是速度快,缺点是传送信息量小,编程复杂
高级通信能够传送任意数量的数据,包括三种消息缓冲区,邮箱机制,管道
消息或邮箱机制特点:无论接收进程是否准备好接收进程,发送进程都要将把所有发送的消息送入缓冲区或者邮箱
发送进程和接收进程地位平等
只要存在空缓冲区或邮箱,发送进程就可以发送消息
 发送进程和接收进程之间无直接的连接关系,接收进程可能在收到某个发送进程发来的消息之后,又转去接收另一个发送进程发来的消息;
 发送进程和接收进程之间存在缓冲区或邮箱,用来存
放消息 
于消息缓冲机制中所使用的缓冲区为公用缓冲区,使用消息缓冲区传送数据时,
两个进程必须满足:
发送进程和接收进程操作缓冲区时,禁止其他进程对缓冲区消息队列的访问;
当缓冲区中无消息时,接收进程不能收到任何消息

邮箱通信就是由发送进程申请建立一个与接收进程链接的邮箱。发送进程把消息送
往邮箱,接收进程从邮箱中将消息取走,从而完成进程间的消息交换。
设置邮箱的最大好处是发送进程和接收进程之间没有处理时间上的限制。
邮箱可以视为发送进程与接收进程之间的大小固定的私有数据结构,它不象缓冲区那样被系统中所有进程共享

父进程生成一个子进程,子进程向pipe中写入一个字符串,父进程从pipe中读出该字符串

两个进程发生死锁的情形:各拥有一部分资源,但又都得不到所需的全部资源

死锁的起因是并发进程的资源竞争。
产生死锁的根本原因:系统提供的资源个数少于并发进程所要求的该类资源数。

死锁发生的必要条件
互斥条件:一个资源一次只能被一个进程所使用;
非剥夺条件: 进程所获得的资源在未使用完毕前,不能被别的进程强行剥夺,只能由获
得该资源的进程自己释放。
部分分配条件: 进程每次申请它所需要的一部分资源,在等待新资源的同时,继续占有
已分配到的资源。
环路条件: 若干个进程构成环行请求链,链中每个进程已获得的资源同时被下一个进程
请求

只要不满足其中的一个条件就不会产生死锁
没有更多推荐了,返回首页