📄 1.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312">
<META NAME="GENERATOR" CONTENT="《良友》v2.1, 作者:安富国,http://winking.126.com">
<TITLE>LFYOS</TITLE>
</HEAD>
<BODY style="font-family: 宋体; font-size: 9pt">
<CENTER><TABLE CELLSPACING=10 CELLPADDING=10 WIDTH="60%" BGCOLOR="#FFB693" >
<TR>
<TD ALIGN=CENTER><FONT SIZE=+2><!--标题由此开始-->LFYOS</TD>
</TR>
</TABLE></CENTER>
<p><h3>目 录</h3>
<!--目录由此开始--><A NAME="Content" ID="Content"></A>
<OL><LI><A HREF="#I502">LFYOS</A></LI>
<OL><LI><A HREF="#I503">安装</A></LI>
<LI><A HREF="#I504">数据结构</A></LI>
<OL><LI><A HREF="#I505">内核</A></LI>
<LI><A HREF="#I506">内存管理器</A></LI>
</OL><LI><A HREF="#I507">内核实现</A></LI>
<OL><LI><A HREF="#I508">就绪线程</A></LI>
<OL><LI><A HREF="#I509">堆数据结构</A></LI>
<LI><A HREF="#I510">就绪线程管理部件的数据结构及其实现</A></LI>
<LI><A HREF="#I511">就绪线程管理部件提供的调用</A></LI>
</OL><LI><A HREF="#I512">信号量</A></LI>
<OL><LI><A HREF="#I513">信号量和P、V操作</A></LI>
<LI><A HREF="#I514">内核中的信号量</A></LI>
<LI><A HREF="#I515">信号量管理数据结构</A></LI>
<LI><A HREF="#I516">信号量管理的实现</A></LI>
</OL><LI><A HREF="#I517">线程迁移</A></LI>
<LI><A HREF="#I518">中断</A></LI>
<LI><A HREF="#I519">处理机</A></LI>
<OL><LI><A HREF="#I520">处理机管理数据结构</A></LI>
<LI><A HREF="#I521">处理机管理的实现</A></LI>
</OL><LI><A HREF="#I522">存储管理</A></LI>
<OL><LI><A HREF="#I523">存储管理数据结构</A></LI>
<LI><A HREF="#I524">页框状态的变迁</A></LI>
<LI><A HREF="#I525">页框散列队列</A></LI>
<LI><A HREF="#I526">存储管理的实现</A></LI>
</OL></OL><LI><A HREF="#I527">编程手册</A></LI>
<OL><LI><A HREF="#I528">LFYOS中应用程序编程模型</A></LI>
<OL><LI><A HREF="#I529">单一数据存储模型</A></LI>
<LI><A HREF="#I530">实现了数据存储、数据计算和资源管理的分离</A></LI>
<LI><A HREF="#I531">应用程序之间的依赖关系</A></LI>
</OL><LI><A HREF="#I532">内核提供的系统功能调用</A></LI>
<OL><LI><A HREF="#I533">参数传递</A></LI>
<LI><A HREF="#I534">系统功能调用的例子</A></LI>
</OL><LI><A HREF="#I535">内核中系统功能调用的格式</A></LI>
<OL><LI><A HREF="#I536">线程迁移和线程返回</A></LI>
<LI><A HREF="#I537">对信号量执行P、V操作</A></LI>
<LI><A HREF="#I538">信号量定时</A></LI>
<LI><A HREF="#I539">创建线程</A></LI>
<LI><A HREF="#I540">进程资源</A></LI>
<LI><A HREF="#I541">申请和释放信号量</A></LI>
<LI><A HREF="#I542">线程属性</A></LI>
<LI><A HREF="#I543">查询存储体容量和地址</A></LI>
<LI><A HREF="#I544">设置文件窗口capability校验</A></LI>
</OL><LI><A HREF="#I545">内存管理器提供的功能调用</A></LI>
<OL><LI><A HREF="#I546">文件窗口</A></LI>
<LI><A HREF="#I547">地址映射</A></LI>
<LI><A HREF="#I548">flush</A></LI>
<LI><A HREF="#I549">标志页框</A></LI>
<LI><A HREF="#I550">存储域</A></LI>
<LI><A HREF="#I551">计算存储管理区需要的存储空间</A></LI>
<LI><A HREF="#I552">初试化和安装</A></LI>
<LI><A HREF="#I553">操纵文件窗口</A></LI>
</OL><LI><A HREF="#I554">文件系统提供的功能调用</A></LI></OL></OL></OL>
<hr><br><A NAME="I502" ID="I502"></A><center><b><font size=+2>LFYOS</font></b></center><br>
<center><A HREF="#Content">[目录]</A></center>
<hr><br><A NAME="I503" ID="I503"></A><center><b><font size=+2>安装</font></b></center><br>
通过Redhat 7.1实施安装<p>
我们安装的开发环境是Redhat 7.1,内核版本linux-2.4.2,下面以该版本为例来讨论LINUX操作系统安装和加载问题。在Redhat 7.1Linux操作系统中,当重构内核时,首先进入目录/usr/src/ linux-2.4.2,执行make命令,该命令根据文件/usr/src/ linux-2.4.2.Makefile中的规则,执行规则指定的各个命令,其执行过程是首先生成一个内核图象,然后再把该内核图象压缩后,安装到系统之中。生成内核图象的make规则为:<p>
vmlinux: $(CONFIGURATION) init/main.o init/version.o linuxsubdirs<br>
$(LD) $(LINKFLAGS) $(HEAD) init/main.o init/version.o \<br>
--start-group \<br>
$(CORE_FILES) \<br>
$(DRIVERS) \<br>
$(NETWORKS) \<br>
$(LIBS) \<br>
--end-group \<br>
-o vmlinux<p>
我们实现虚拟地址空间基于文件操作系统的安装和加载的方法是:修改该规则,使得做make重构内核时,不再根据生成linux内核的目标文件生成内核图象,而是根据生成虚拟地址空间基于文件操作系统的目标文件生成内核图象,为此把上诉规则修改为:<p>
vmlinux : $(LFYOS)<br>
$(LD) $(LINKFLAGS) $(LFYOS) -o vmlinux<p>
变量$(LFYOS)中存放的是生成虚拟地址空间基于文件操作系统内核需要的目标文件,这样当我们重新做make重构内核时,就会根据变量$(LFYOS)中指定的目标文件生成一个内核图象,并把该内核图象安装到系统之中,而不再根据生成Linux的内核文件生成和安装LINUX内核图象。当重新启动系统时,就会把我们实现的内核启动起来,而不会启动一个LINUX内核。<p>
安装和加载的详细步骤如下:<p>
·i.以超级用户root注册。安装操作系统的内核当然必须是超级用户root。<p>
·ii.检查系统是否安装了内核开发的软件包,是否安装了lilo,如果没有安装安装之,关于如何安装请参考安装LINUX的详细资料,此处略。<p>
·iii.重构一遍linux内核,关于如何重构linux内核请参考安装LINUX的详细资料,此处略。<p>
·iv. 进入目录/usr/src/linux-X.X.X(其中的X.X.X为内核版本号),复制一个Makefile,也就是执行命令:<br>
cp Makefile lfy_makefile<p>
·v.编辑文件lfy_makefile,确定其中的规则:<p>
vmlinux: $(CONFIGURATION) init/main.o init/version.o linuxsubdirs<br>
$(LD) $(LINKFLAGS) $(HEAD) init/main.o init/version.o \<br>
--start-group \<br>
$(CORE_FILES) \<br>
$(DRIVERS) \<br>
$(NETWORKS) \<br>
$(LIBS) \<br>
--end-group \<br>
-o vmlinux<p>
把该规则修改为:<p>
vmlinux : $(LFYOS)<br>
$(LD) $(LINKFLAGS) $(LFYOS) -o vmlinux<p>
·vi.进入/etc目录,编辑lilo的配置文件/etc/lilo.conf。该文件中的内容类似于:<p>
boot=/dev/hda<br>
map=/boot/map<br>
install=/boot/boot.b<br>
prompt<br>
timeout=180<br>
message=/boot/message<br>
linear<br>
default=dos<p>
image=/boot/vmlinuz-2.4.2-2<br>
label=linux<br>
read-only<br>
root=/dev/hda7<p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -