眼下最流行的”版本管理系统”,非 Git 莫属! 关于是否使用 SVN? 个人的建议是如果团队有权限管理、代码安全控制等考虑的话,那么考虑 SVN,否则建议使用 Git/Mercurial, 关于 Mercurial 还是 Git,因为 GitHub 这个大社区的缘故,因此如果是程序员个人搞开源的话,还是建议优先 Git,如果 Git、Mercurial 您都想试试,那么这里打个广告:强烈建议您试
实验执行流程概述 与实验七相比,实验八增加了文件系统,并因此实现了通过文件系统来加载可执行文件到内存中运行的功能,导致对进程管理相关的实现比较大的调整。我们来简单看看文件系统是如何初始化并能在ucore的管理下正常工作的。 首先看看kern_init函数,可以发现与lab7相比增加了对fs_init函数的调用。fs_init函数就是文件系统初始化的总控函数,它进一步调用了虚拟文件系统初始化函数vf
实验执行流程概述 互斥是指某一资源同时只允许一个进程对其进行访问,具有唯一性和排它性,但互斥不用限制进程对资源的访问顺序,即访问可以是无序的。同步是指在进程间的执行必须严格按照规定的某种先后次序来运行,即访问是有序的,这种先后次序取决于要系统完成的任务需求。在进程写资源情况下,进程间要求满足互斥条件。在进程读资源情况下,可允许多个进程同时访问资源。 实验七设计实现了多种同步互斥手段,包括时钟中断管
实验执行流程概述 在实验五,创建了用户进程,并让它们正确运行。这中间也实现了FIFO调度策略。可通过阅读实验五下的 kern/schedule/sched.c 的 schedule 函数的实现来了解其FIFO调度策略。与实验五相比,实验六专门需要针对处理器调度框架和各种算法进行设计与实现,为此对ucore的调度部分进行了适当的修改,使得kern/schedule/sched.c 只实现调度器框架,
实验执行流程概述 到实验四为止,ucore还一直在核心态“打转”,没有到用户态执行。提供各种操作系统功能的内核线程只能在CPU核心态运行是操作系统自身的要求,操作系统就要呆在核心态,才能管理整个计算机系统。但应用程序员也需要编写各种应用软件,且要在计算机系统上运行。如果把这些应用软件都作为内核线程来执行,那系统的安全性就无法得到保证了。所以,ucore要提供用户态进程的创建和执行机制,给应用程序执
实验执行流程概述 lab2和lab3完成了对内存的虚拟化,但整个控制流还是一条线串行执行。lab4将在此基础上进行CPU的虚拟化,即让ucore实现分时共享CPU,实现多条控制流能够并发执行。从某种程度上,我们可以把控制流看作是一个内核线程。本次实验将首先接触的是内核线程的管理。内核线程是一种特殊的进程,内核线程与用户进程的区别有两个:内核线程只运行在内核态而用户进程会在在用户态和内核态交替运行;
实验执行流程概述 本次实验主要完成ucore内核对虚拟内存的管理工作。其总体设计思路还是比较简单,即首先完成初始化虚拟内存管理机制,即需要设置好哪些页需要放在物理内存中,哪些页不需要放在物理内存中,而是可被换出到硬盘上,并涉及完善建立页表映射、页访问异常处理操作等函数实现。然后就执行一组访存测试,看看我们建立的页表项是否能够正确完成虚实地址映射,是否正确描述了虚拟内存页在物理内存中还是在硬盘上,是
实验执行流程概述 本次实验主要完成ucore内核对物理内存的管理工作。参考ucore总控函数kern_init的代码,可以清楚地看到在调用完成物理内存初始化的pmm_init函数之前和之后,是已有lab1实验的工作,好像没啥修改。其实不然,ucore有两个方面的扩展。首先,bootloader的工作有增加,在bootloader中,完成了对物理内存资源的探测工作(可进一步参阅附录A和附录B),让u
Guava提供数学相关的Utilities类来处理int,long和BigInteger。 以下是有用的实用程序列表 - Sr.No 实用程序名称和描述 1 IntMath int的数学实用程序。 2 LongMath 数学实用程序很长。 3 BigIntegerMath BigInteger的数学实用程序。
Guava通过一个接口LoadingCache 提供了一个非常强大的基于内存的缓存机制。 值自动加载到缓存中,它提供了许多对缓存需求有用的实用方法。 接口声明 (Interface Declaration) 以下是com.google.common.cache.LoadingCache《K,V》界面的声明 - @Beta @GwtCompatible public interface Loadin
在本章中,我们将学习如何在Python中实现线程。 用于线程实现的Python模块 Python线程有时被称为轻量级进程,因为线程占用的内存比进程少得多。 线程允许一次执行多个任务。 在Python中,我们有以下两个在程序中实现线程的模块 - 《_thread》 module 《threading》 module 这两个模块之间的主要区别在于《_thread》模块将线程视为一个函数,而《threa
容器需要在开始执行进入应用的第一个请求之前完成 Web 应用中的监听器类的实例化。容器必须保持到每一个监听器的引用直到为 Web 应用最后一个请求提供服务。 ServletContext 和 HttpSession 对象的属性改变可能会同时发生。不要求容器同步到属性监听器类产生的通知。维护状态的监听器类负责数据的完整性且应明确处理这种情况。
Node.js模块库中有几个实用程序模块。 这些模块非常常见,在开发任何基于节点的应用程序时经常使用。 Sr.No. 模块名称和描述 1 OS模块 提供与操作系统相关的基本实用功能。 2 路径模块 提供用于处理和转换文件路径的实用程序。 3 网络模块 提供服务器和客户端作为流。 充当网络包装器。 4 DNS模块 提供执行实际DNS查找以及使用基础操作系统名称解析功能的功能。 5 域模块 提供将多个
本小节实现一个通讯录管理程序,通过这个案例来融会贯通之前所学习的知识,该程序使用到如下知识点: 条件选择 循环 列表 字典 键盘输入 屏幕输出 编写程序 addr-manage.py 实现通讯录管理系统,通讯录包含若干联系人,每个联系人包括:姓名、地址、电话 3 项内容。程序提供 4 项基本功能: 增加联系人: 用户输入姓名、地址、电话等信息,将信息保存在一个列表中 列出联系人: 打印输出所有联系
实验四(下):线程调度 实验题目 实验:了解并实现 Stride Scheduling 调度算法,为不同线程设置不同优先级,使得其获得与优先级成正比的运行时间。 分析: 在 Stride Scheduling 算法下,如果一个线程进入了一段时间的等待(例如等待输入,此时它不会被运行),会发生什么? 对于两个优先级分别为 9 和 1 的线程,连续 10 个时间片中,前者的运行次数一定更多吗? 你认为