关闭

ucore_lab7

练习1 理解内核级信号量的实现和基于内核级信号量的哲学家就餐问题 完成练习0后,建议大家比较一下(可用kdiff3等文件比较软件)个人完成的lab6和练习0完成后的刚> 修改的lab7之间的区别,分析了解lab7采用信号量的执行过程。执行make grade,大部分测试用应该通过。 [练习1.1]请在实验报告中给出内核级信号量的设计描述,并说其大致执行流流程。答: 在ucore中,通过sem...
阅读(203) 评论(0)

进程切换

一个进程的上下文 可以分为三个部分:用户级上下文、寄存器上下文以及系统级上下文。 用户级上下文: 正文、数据、用户堆栈以及共享存储区; 寄存器上下文: 通用寄存器、程序寄存器(IP)、处理器状态寄存器(EFLAGS)、栈指针(ESP,SS); 系统级上下文: 进程控制块task_struct、内存管理信息(mm_struct、vm_area_struct、pgd、pte)、内核栈发生进程调度...
阅读(379) 评论(0)

虚拟存储

虚拟存储需求背景:虚拟存储是在这个非连续存储内存分配的基础上,可以把一部分内容放在外村里的做法 理想的存储器: 容量更大,速度更快,价格更便宜的非易失性存储器交换技术:增加正在运行或者需要运行的程序的内存 实现方法:可将暂时不能运行的程序放到外存 换入换出的基本单位:整个进程的地址空间 换出:把一个进程的整个地址空间保存到外存 换入:将外存中某进程的地址空间读入到内存 交换的时机:只...
阅读(185) 评论(0)

中断,异常,系统调用

中断由外部设备产生,异常由CPU内部产生(异常包括错误Fault, 陷阱Trap即故意出错,和终止Abort)。中断要找到中断服务程序所以需要IDT这个大数组来存放中断门(中断门就是一种段描述符,用于找到中断程序入口地址)。CPU为了方便找到IDT加了一个寄存器IDTR。 内核的进入与退出: 系统调用:应用程序主动向操作系统发出服务请求// System call numbers #define...
阅读(336) 评论(1)

逻辑地址,线性地址,物理地址

逻辑地址,线性地址,物理地址 1. 分段,即逻辑地址转换为线性地址,段基址+段偏移=线程地址。通过LDT中的段选择符找到段描述符(GDT)然后找到段基址。CPU为了方便找到LDT与GDT又在CPU中做了两个寄存器GDTR与LDTR。GDT中有limit字段,相当于段尾址,从硬件上可以确保段不会越界。一个程序是分段的,如代码放在代码段(CS),局部变量与函数指针放在栈段(SS),数据放在堆段等(D...
阅读(232) 评论(0)

系统启动

启动时计算机内存和磁盘布局: 0x0- 640k 空闲空间 -1MB BIOS 启动固件: 20位地址空间 CS:IP=0xf000:fff0 系统处于实模式,PC=16*CS+IP; 4GB 空闲空间 BIOS系统调用: BIOS以中断调用的方式 提供了基本的I/O功能, INT 10h: 字符显示 INT 13h: 磁盘扇区读写 INT 15h: 检测内存大小 INT 16h: 键...
阅读(83) 评论(0)

ucore-lab7

练习1 理解内核级信号量的实现和基于内核级信号量的哲学家就餐问题 完成练习0后,建议大家比较一下(可用kdiff3等文件比较软件)个人完成的lab6和练习0完成后的刚> 修改的lab7之间的区别,分析了解lab7采用信号量的执行过程。执行make grade,大部分测试用应该通过。 [练习1.1]请在实验报告中给出内核级信号量的设计描述,并说其大致执行流流程。答: 在ucore中,通过sem...
阅读(228) 评论(0)

DOM

节点属性DOM 是树型结构,相应的,可以通过一些节点属性来遍历节点树:nodeName 节点名称,相当于tagName.属性节点返回属性名,文本节点返回#text。nodeName,是只读的。 nodeType 节点的类型,返回值:1,元素节点;2,属性节点;3,文本节点。nodeType 是只读的。 nodeValue 节点的值,返回一个字符串,指示这个节点的值。元素节点返回 null,属...
阅读(96) 评论(0)

素数检测

素数 素数的定义 素数是这样被定义的:一个大于1的整数,如果不能被除1和它本身外的其它正整数整除,则是素数(又称质数)。与素数相关的定义还有合数:一个大于1的整数,如果不是素数则是合数。其中能整除这个数的正整数叫做约数,不等于1也不等于合数本身的约数叫做非平凡约数。注意1既不是素数又不是合数。举几个例子:2是素数,因为除1和2外没有其它正整数可以整除2。3也是素数。4不是素数,因为2可以整除4。...
阅读(128) 评论(0)

gmpy2

PARI/GP是一个比较强大的数论库,“针对数论中的快速计算(大数分解,代数数论,椭圆曲线…)而设计”,它既可以被C/C++或Python之类的编程语言调用,而且它本身又是一种自成一体的脚本语言。而如果仅仅需要高精度的大数运算功能,那么GMP似乎更满足我们的需求。了解C/C++的读者都会知道GMP(全称是GNU Multiple Precision Arithmetic Library,即GNU高精...
阅读(661) 评论(1)

操作系统的信号量和管程

信号量 semaphore 信号量是操作系统提供的一种协调共享资源访问的方法 软件同步是平等线程间的一种同步协商机制 OS是管理者,地位高于进程 用信号量表示系统资源的数量由一个整形 (sem)变量和两个原子操作组成 P()(Prolaag (荷兰语尝试减少)) sem减1 如sem<0, 进入等待, 否则继续 V()(Verhoog (荷兰语增加)) sem加1...
阅读(1540) 评论(0)

操作系统的调度策略

调度程序:挑选就绪进程的内核函数: 调度策略(依据什么原则挑选进程/线程? ) 调度时机(什么时候进行调度?)调度时机 在进程/线程的生命周期中的什么时候进行调度? (1)进程从运行状态切换到等待状态 (2) 进程被终结了非抢占系统: 当前进程主动放弃CPU时可抢占系统:(1)中断请求被服务例程响应完成时(2)当前进程被抢占a. 进程时间片用完b. 进程从等待切换到就绪调度策略: 确...
阅读(927) 评论(0)

static函数与普通函数

全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用...
阅读(113) 评论(0)

C/C++中函数指针

c/c++中函数指针 函数存放在内存的代码区域内,它们同样有地址,我们如何能获得函数的地址呢? 如果我们有一个int test(int a)的函数,那么,它的地址就是函数的名字,这一点如同数组一样,数组的名字就是数组的起始地址。  定义一个指向函数的指针用如下的形式,以上面的test()为例:int (*fp)(int a);//这里就定义了一个指向函数的指针  函数指针不能绝对不能指向不同类型,或...
阅读(102) 评论(0)

Mistake Bound Framework(出错界限模型)

Mistake Bound Framework(出错界限模型)Mistake Bound Framework So far: how many examples needed? What about: how many mistakes before convergence? Let’s consider similar setting to PAC learning: Instances draw...
阅读(216) 评论(0)
18条 共2页1 2 下一页 尾页
    个人资料
    • 访问:67951次
    • 积分:1956
    • 等级:
    • 排名:千里之外
    • 原创:128篇
    • 转载:16篇
    • 译文:0篇
    • 评论:27条
    每个人都是过客,每个人都有故事
    也许深夜往往是人们内心最为脆弱的时刻。孤独,绝望,失意,无奈......这些复杂沉重的情绪会随着黑夜的来临不再躲藏。
    最新评论