- 博客(39)
- 收藏
- 关注
原创 不吉利的日期
题目描述在国外,每月的 13 号和每周的星期 5 都是不吉利的。特别是当 13 号那天恰好是星期 5时,更不吉利。现在给你一个年份,请你从小到大依次输出当年所有13 号是星期 5 的月份。输入描述:输入包含多组数据,每组数据包含一个正整数year(2000≤year≤9999)。输出描述:对应每一组数据,输出所有符合条件的月份,月份之间用空格隔开。如
2015-07-30 22:03:03
3546
原创 送外卖
题目描述冬天到了,小伙伴们都懒得出去吃饭了,纷纷打电话叫起了外卖。送外卖的小哥想找出一条最短的路径,小区门口进来,送完外卖又回到小区门口。整个小区是一个由m*n个边长为1的正方形组成的矩形,各幢公寓楼分布于正方型的顶点上,小区门口位于左上角。每幢楼与相邻的八个方向的楼之间都有道路。下图为m=2,n=3的小区地图,并且外卖小哥要经过的最短路径为6。输入描述:输入有多组数据
2015-07-30 21:27:18
1446
原创 三角形
题目描述给定三条边,请你判断一下能不能组成一个三角形。输入描述:输入包含多组数据,每组数据包含三个正整数a、b、c(1≤a, b, c≤10^100)。输出描述:对应每一组数据,如果它们能组成一个三角形,则输出“Yes”;否则,输出“No”。输入例子:1 2 32 2 2输出例子:NoYes算法:#incl
2015-07-22 19:21:03
663
原创 ucore操作系统lab8——实验报告
一、练习一: 完成读文件操作的实现首先了解打开文件的处理流程,然后参考本实验后续的文件读写操作的过程分析,编写在sfs_inode.c中sfs_io_nolock读文件中数据的实现代码。//LAB8:EXERCISE1 YOUR CODE HINT: call sfs_bmap_load_nolock, sfs_rbuf, sfs_rblock,etc. read different ki
2015-07-15 00:10:09
4554
原创 ucore操作系统lab7——实验报告
注:lab7不需要修改之前的代码,直接合并到lab7即可。一、练习一: 理解内核级信号量的实现和基于内核级信号量的哲学家就餐问题分析了解lab7采用信号量的执行过程。请在实验报告中给出内核级信号量的设计描述,并说其大致执行流流程。给出给用户态进程/线程提供信号量机制的设计方案,并比较说明给内核级提供信号量机制的异同。struct semaphore {int count;q
2015-07-12 20:09:10
3946
原创 分解因数
题目描述所谓因子分解,就是把给定的正整数a,分解成若干个素数的乘积,即 a = a1 × a2 × a3 × ... × an,并且 1 先给出一个整数a,请输出分解后的因子。输入描述:输入包含多组数据,每组数据包含一个正整数a(2≤a≤1000000)。输出描述:对应每组数据,以“a = a1 * a2 * a3...”的形式输出因式分解后的结果。
2015-07-11 19:28:34
1309
原创 ucore操作系统lab6 —— 调度算法
一、练习零:填写已有实验本实验依赖实验1/2/3/4/5。请把你做的实验2/3/4/5的代码填入本实验中代码中有“LAB1”/“LAB2”/“LAB3”/“LAB4”“LAB5”的注释相应部分。并确保编译通过。注意:为了能够正确执行lab6的测试应用程序,可能需对已完成的实验1/2/3/4/5的代码进行进一步改进。//LAB6 YOUR CODE : (update LAB5 steps)
2015-07-04 22:51:03
6490
原创 ucore操作系统lab6(理论部分)
一、实验流程1、进程的正常生命周期如下:进程首先在 cpu 初始化或者 sys_fork 的时候被创建,当为该进程分配了一个进程控制块之后,该进程进入 uninit态(在proc.c 中 alloc_proc)。当进程完全完成初始化之后,该进程转为runnable态。当到达调度点时,由调度器 sched_class 根据运行队列rq的内容来判断一个进程是否应该被运行,即把处
2015-07-03 23:30:02
2169
原创 ucore操作系统lab5 ——用户进程管理
练习1: 加载应用程序并执行do_execv函数调用load_icode(位于kern/process/proc.c中)来加载并解析一个处于内存中的ELF执行文件格式的应用程序,建立相应的用户内存空间来放置应用程序的代码段、数据段等,且要设置好proc_struct结构中的成员变量trapframe中的内容,确保在执行此进程后,能够从应用程序设定的起始执行地址开始执行。需设置正确的trapfr
2015-06-29 23:38:56
3272
1
原创 采花生
题目描述鲁宾逊先生有一只宠物猴,名叫多多。这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!——熊字”。鲁宾逊先生和多多都很开心,因为花生正是他们的最爱。在告示牌背后,路边真的有一块花生田,花生植株整齐地排列成矩形网格。有经验的多多一眼就能看出,每棵花生植株下的花生有多少。为了训练多多的算术,鲁宾逊先生说:“你先找出花生最多的植株
2015-06-29 19:08:05
1631
2
原创 ucore操作系统lab5 -- 用户进程管理(理论部分)
一、实验流程在内存管理部分,lab5与lab4最大的区别就是增加用户态虚拟内存的管理。为了管理用户态的虚拟内存,需要对页表的内容进行扩展,能够把部分物理内存映射为用户态虚拟内存。如果某进程执行过程中,CPU在用户态下执行(在CS段寄存器最低两位包含有一个2位的优先级域,如果为0,表示CPU运行在特权态;如果为3,表示CPU运行在用户态。),则可以访问本进程页表描述的用户态虚拟内存,但由于权限不
2015-06-28 21:12:37
2897
1
原创 ucore操作系统实验lab4 -- 内核线程管理
练习一:分配并初始化一个进程控制块(需要编码) alloc_proc函数(位于kern/process/proc.c中)负责分配并返回一个新的struct proc_struct结构,用于存储新建立的内核线程的管理信息。ucore需要对这个结构进行最基本的初始化,完成这个初始化过程。 【提示】在alloc_proc函数的实现中,需要初始化的proc_struct结构中的成员变量至少
2015-06-27 23:04:05
3243
原创 ucore操作系统lab4实验报告(理论部分)
内核线程管理一、关键数据结构 -- 进程控制块1、首先简单说明一下内核线程与用户进程的区别:内核线程只运行在内核态。用户进程会在在用户态和内核态交替运行所有内核线程共用ucore内核内存空间,不需为每个内核线程维护单独的内存空间,而用户进程需要维护各自的用户内存空间。2、进程管理信息用struct proc_struct表示,在kern/process/proc.h中定义如
2015-06-26 20:58:17
2654
原创 插入与归并(25)
题目描述根据维基百科的定义:插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列。每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置。如此迭代直到全部元素有序。归并排序进行如下迭代操作:首先将原始序列看成N个只包含1个元素的有序子序列,然后每次迭代归并两个相邻的有序子序列,直到最后只剩下1个有序的序列。现给定原始序列和由某排序算法产生的中间序列,请你判
2015-06-23 20:59:03
718
原创 有理数四则运算(20)
题目描述本题要求编写程序,计算2个有理数的和、差、积、商。输入描述:输入在一行中按照“a1/b1 a2/b2”的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分母不为0。输出描述:分别在4行中按照“有理数1 运算符 有理数2 = 结果”的格式顺序输出2个有理数的和、差、积、商。注意输出的每个有理数必须是该有理数的最
2015-06-22 21:11:58
569
原创 ucore-lab3 实验报告
练习一:给未被映射的地址映射上物理页 1、描述: 在lab2中我们实现并启动了分页机制,现在我们需要考虑什么情况下会产生页错误异常并触发中断。显答案是在指令或数据的虚拟地址所对应的物理页不在内存中,或者访问权限不够的情况下。其具体原因有以下三点: ①页表项全为0——虚拟地址与物理地址未建立映射关系或已被撤销。 ②物理页面不在内存中——需要进行换页机制。 ③访问权限不够——
2015-06-19 22:26:03
4405
原创 查验身份证(15)
查验身份证(15)题目描述一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:Z:0 1 2 3 4 5 6 7 8 9 10M:1 0 X 9 8
2015-06-19 20:05:05
567
原创 ucore Lab3操作系统设计(理论部分)
一、实验流程、关键数据结构和相关函数1、实验流程kern init()----->pmm_init()------>pic_init() idt_init()------>vmm_init()------>ide_init()------>swap_init() vmm.c------>check_vma_struck() check_pg
2015-06-18 23:23:34
3267
原创 人口普查(20)
题目描述某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过200岁的老人,而今天是2014年9月6日,所以超过200岁的生日和未出生的生日都是不合理的,应该被过滤掉。输入描述:输入在第一行给出正整数N,取值在(0, 105];随后N行,每行给出1个人的姓名(由不超过5个
2015-06-16 19:47:11
547
原创 ucore操作系统lab2实验报告
练习1:实现 first-fit 连续物理内存分配算法在实现first fit 内存分配算法的回收函数时,要考虑地址连续的空闲块之间的合并操作。提示:在建立空闲页块链表时,需要按照空闲页块起始地址来排序,形成一个有序的链表。可能会修改default_pmm.c中的default_init,default_init_memmap,default_alloc_pages, default_free
2015-06-14 22:29:40
15191
1
原创 ucore操作系统lab2实验报告之理论部分
lab2-------物理内存管理一、实验基本知识简介1、x86特权级------段选择子(1)、在保护模式下,特权级总共有4个,编号从 0(最高特权)到3(最低特权)。三类主要的资源,即内存、 I/O地址空间以及特权指令需要保护。特权指令如果被用户态的程序所使用,就会受到保护模式的保护机制限制,导致一个故障中断( general-protection exce
2015-06-11 22:23:15
2949
原创 ucore-lab1实验报告
练习一:1、操作系统镜像文件ucore.img是如何一步一步生成的?(需要比较详细地解释Makefile中每一条相关命令和命令参数的含义,以及说明命令导致的结果)+ cc kern/init/init.c //编译 init.c+ cc kern/libs/readline.c //编译 readline.c+ cc kern/libs/stdio.c //编译 stdio.
2015-06-02 23:25:43
5364
原创 ucore操作系统lab1实验准备知识
ucore实验环境简介:虚拟环境:VirtualBox操作环境:Utunbu 10.04编译环境:gcc-4.6.x实验目的:操作系统是一个软件,也需要通过某种机制加载并运行它。在这里我们将通过另外一个更加简单的软件-bootloader来完成这些工作。为此,我们需要完成一个能够切换到x86的保护模式并显示字符的bootloader,为启动操作系统ucore做准
2015-05-28 22:09:24
2564
原创 栈的压入、弹出序列
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如:input:1 2 3 4 54 5 3 2 1output:trueinput:1 2 3 4 54 3 5 1 2output:false代码如下:bool IsPopOrder(vector pushV,vecto
2015-05-27 18:18:56
430
原创 linux内核学习总结
作者:吴乐 山东师范大学《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000题外话: 首先感谢网易云课堂的平台让我有机会学习计算机相关的慕课课程,还要感谢萌萌的孟老师对课程的付出,最后还要感谢一同学习的同学和坚持下来的自己。 学习这门课最大的收获就是明白了一些分析代码问题的思路与方法,我觉得这也是最
2015-05-27 18:14:58
415
原创 通过gdb跟踪进程调度分析进程切换的过程
作者:吴乐 山东师范大学《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000本实验目的:通过gdb在linux下对一个简单的命令行命令实现进程的过程进行跟踪,分析一般用户进程实现进程切换的过程,并进一步剖析进程调度的工作的原理。一、实验过程1、打开实验环境,并设置context_switch和pick_n
2015-05-27 18:14:54
1685
原创 通过gdb跟踪Linux内核装载和启动可执行程序过程
作者:吴乐 山东师范大学《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000实验目的:通过对一个简单的可执行程序用gdb进行代码的跟踪,剖析linux内核是如何动态和静态装载和启动程序的,进而总结linux内核可执行程序加载的过程。一、实验过程1、编写一个简单的Exec的创建进程的函数2、打开gd
2015-05-27 18:14:50
604
原创 通过fork函数创建进程的跟踪,分析linux内核进程的创建
作者:吴乐 山东师范大学《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000一、实验过程1.打开gdb,设置断点2.跟踪到do_fork处3.跟踪到copy_process断点处。4.跟踪到ret_from_fork子进程创建完成。二、代码部分分析Fork的系统调用代码在l
2015-05-27 18:14:45
449
原创 通过实验分析system_call中断处理过程
作者:吴乐 山东师范大学《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000本实验目的:通过以一个简单的menu小程序,跟踪系统调用的过程,分析与总结系统调用的机制和三层进入的过程。一、实验步骤1.使用gdb在sys_time处设置断点并list找到的代码2.用s(step)跟踪断点3.当
2015-05-27 18:14:41
531
原创 通过库函数API和C代码中嵌入汇编代码剖析系统调用的工作机制
作者:吴乐 山东师范大学《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000本次实验的主要内容就是分别采用API和gcc嵌入汇编的方式调用system_call。系统调用其实就是操作系统提供的服务。我们平时编写的程序,如果仅仅是数值计算,那么所有的过程都是在用户态完成的,但是我们想将变量打印在屏幕上,就必须调用pri
2015-05-27 18:14:37
475
原创 通过gdb调试分析Linux内核的启动过程
作者:吴乐 山东师范大学《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000一、实验流程1.打开环境执行命令:cd LinuxKernel/执行命令:qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.imgMenuOS便可
2015-05-27 18:14:32
652
原创 通过简单的Linux内核启动程序代码窥探操作系统的启动原理
作者:吴乐 山东师范大学《Linux内核分析》 孟宁 MOOC课程http://mooc.study.163.com/course/USTC-1000029000一、程序设计与分析mymain.c编写如下,参考了孟宁老师的设计。/* * linux/mykernel/mymain.c * * Kernel internal my_start_kernel
2015-05-27 18:14:28
591
原创 通过反汇编C语言小程序学习Liunx汇编语言
大家好! 我是来自山东师范大学的吴乐。 今天在《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 第一单元学习了一些基本的汇编语言 现在我分享一下我的学习历程,本次课程的目的是通过反汇编一段简单的小程序学习基本汇编指令。 不废话了,上图 第一步: 首先在Code目录中编写一段简单的C语言小
2015-05-27 18:14:23
562
原创 顺时针打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字例如:input:1 2 3 45 6 7 8 9 10 11 1213 14 15 16 output:1 2 3 48 12 16 1514 13 9 56 7 11 10核心代码如下:vector printMatrix(v
2015-05-25 18:14:05
354
原创 丹枫虽老犹多态 – 继承与多态
1.创建MyShape作为基类2. 修改MyRectangle类从MyShape派生3. 修改MyCircle类从MyShape派生4. 增加createShape()函数根据输入信息创建对象4. 在main函数中创建类的实例。(20分)题目内容:增加MyShape类:将MyRectangle与MyCircle类中表示颜色的数据域成员,以及setColor(int R,
2015-05-06 21:54:49
601
原创 万类霜天竞自由 – 对象和类的更多内容
题目内容:修改Screen类:在Screen类中,将保存屏幕宽和高的数据域成员改为 static int 类型。在Screen类中,添加两个 string 类型的数据成员 enter 和 leave,并在构造函数中将他们分别初始化为字符串“enter screen”和“leave screen”在Screen类中,增加一个 Screen* 类型的静态的私有数据成员 instance
2015-04-30 20:27:42
563
原创 物以类聚 – 对象和类
创建两个类,并在main函数中创建类的实例。1. 创建Screen类2. 创建MyRectangle类3. 在main()中创建上述类的实例,并调用对象的函数题目内容:Screen类:Screen类的构造函数能够接收屏幕的宽和高两个整型参数(以像素为单位)并存
2015-04-23 19:43:34
1133
原创 Reversing Linked List (25)
Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elements on L. For example, given L being 1→2→3→4→5→6, if K = 3, then you must output 3→2→1→6→5→4; if K
2015-04-22 23:00:57
308
原创 最大子列和问题(20)
给定K个整数组成的序列{ N1, N2, ..., NK },“连续子列”被定义为{ Ni, Ni+1, ..., Nj },其中 1 输入格式:输入第1行给出正整数 K (输出格式:在一行中输出最大子列和。如果序列中所有整数皆为负数,则输出0。输入样例:6-2 11 -4 13 -5 -2输出样例:20主函数如下#inc
2015-04-22 22:55:36
406
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人