要求

  1. 基于 https://e.coding.net/sylg/os/os.git 代码,完成列表中的任意一个题目,以 git commit 的形式推送到服务器。
  2. 最多 5 人一组完成一个题目。开始任务前请 git pull,如果发现已经有其他组完成了题目并且结果正确,请选另一个完成;如果已经有别的组完成了并且结果不正确,可以纠正错误,提交作为作业。
  3. git commit 说明的格式:“学号 题目编号 <换行符><换行符> 1.编译方法<换行符> 2 运行、测试方法” 学号需要带上全组学号
  4. 根据题目难度+结果正确性+平时出席综合评分。

仓库管理要求

选题

请发送电子邮件到 [email protected] 选择题目,要求主题为 [操作系统] [选题] [题目编号],正文请附属小组成员,首个小组成员将被认定为负责人

如一个3人组选择1号题,那么邮件格式为

主题:[操作系统] [选题] [1]

正文:

2003060xxx 张三

2003060xxx 李四

2003060xxx 王五

其中,张三将被认定为负责人

若多组选题冲突,则以邮件发送时间优先

提交

请妥善保管代码,commit格式错误将被回滚,以此造成的代码丢失仓库管理员将不负责

请勿提交编译后的文件

完成

完成作业后,请发送电子邮件,要求主题为 [操作系统] [完成] [题目编号],请使用选题时的邮箱账号发送,若邮箱账号不匹配将被视为垃圾邮件

注意

选题仅作为参考,如果优先提交commit,则以commit提交时间为准,可以抢题

即,本页选题内容仅为选题意向,避免冲突。若想选的题目已经被选题,依旧可以进行开发,并且抢先提交commit的情况,最终题目选择和成绩评定以优先commit者为准。

评分细则

难度 结果正确 有无缺席 评分
不完全正确 不及格
不完全正确 不及格
正确 不及格
正确 及格
不完全正确 不及格
不完全正确 及格
正确 及格
正确 中等
不完全正确 中等
不完全正确 良好
正确 良好
正确 优秀

题目

  • :white_large_square:可选
  • :ballot_box_with_check:已选
  • :white_check_mark:已完成
编号 难度 需求 备注 状态 负责人
1 添加 basic.c,在 linux 上编译运 行,验证 C 基本语法 A. 定义 EXPECT(表达式,目标值) 宏。宏的功能是打印测试表达式以及测试结果。如果表达式的值不等于目标值,测试失败,测试成功;
B.
char* str=”abc”;char array[]=”abc”;
EXPECT(sizeof(str),2) EXPECT(sizeof(array), 3)
:ballot_box_with_check: 2003060405王诗鹭
2 为 basic.c 添加测试用例 EXPECT(sizeof(strlen(str)),3)
EXPECT(sizeof(strlen(array)), 3)
EXPECT((str+1), ’b’)
EXPECT(
(str+2), ’c’)
EXPECT((str+3), 0)
EXPECT(array[0], ‘a’)
EXPECT(array[3], 0)
EXPECT(
(array+1)==array[1], 1)
EXPECT((array+2)==&(array[2]), 1)
EXPECT(((int*)array+2)==&(array[2]), 1)
:ballot_box_with_check: 2003060404 王明霞
3 为 basic.c 添加测试用例;生成 basic.c 汇编代码 EXPECT(((int)array+2sizeof(int))==&(array[2]), 1)
EXPECT((array+2
sizeof(char))==&(array[2]), 1)
EXPECT(((int
)array+2sizeof(char))==&(array[2]), 1)
看汇编语言 array + 2 与 (int*)array+2 的区别
:white_large_square:
4 为 basic.c 添加测试用例 int count() { static cnt; return &cnt;}
EXPECT(
count += 1, 1);
EXPECT(count, 0);
EXPECT(
count, 1);
EXPECT(count++, 2);
EXPECT((
count)++, 2);
EXPECT((*count)++, 3);
:ballot_box_with_check: 2003060312张翱翔
5 为 basic.c 添加代码 int callee(int a, int b) { 代码打印堆栈内容;return a+b;}
int caller(){ 代码打印堆栈内容;return callee(1, 2); }
比较 _stdcall _cdcall 两种方式声明 callee 的执行结果
:white_large_square:
6 完善 basic.c 编译命令 测试如下代码如何能通过编译:
#define ONE 1
const unsigned int 1
inline int callee(int a, int b) { return a+b;}
/ TODO: /
// TODO:
:white_large_square:
7 添加 timing.c 设计代码比较 inline 函数与普通函数的执行时间;
设计代码比较 memcpy 与 memmove 的执行时间;
设计代码测试 malloc 的时间开销
:white_large_square:
8 为 hello.c 增加命令行 option 输入 hello -l HHH 把大写字母转成小写打印
输入 hello -u hhh 把小写字母转成大写打印
:ballot_box_with_check: 2003060306李鑫
9 为 hello.c 增加互动命令以及信 号处理 如果不带选项执行,打印命令提示:
u 小写转大写;l 大写转小写;e 退出;
收到 ctrl+c 退出
:ballot_box_with_check: 2003060302刘展延
10 验证所有提交的关于 1-9 的答 案的正确性 添加 report.md 文件,格式:
git log 的 SHA, 学号, 是否正确
:ballot_box_with_check: 2003060213马俊俊
11 改进 fork.c fork.c 存在一个子进程需要从多层嵌套函数栈返回问题,请纠正;
添加管道,父进程专门负责 fork 子进程并统一打印结果。
:white_check_mark: 2003060417沈楠
12 改进 fork.c 添加共享内存,子进程将结果写入共享内存,父进程专门负责fork 子进程并统一打印共享内存中的结果。 所有子进程查找结束才打印。 :white_check_mark: 2003060207刘京京
13 改进 fork.c 启动一个进程负责共享内存管理,支持不同进程(包括主进程)通过管道有序插入、查询,子进程的结果要按照从小到大顺序插入。 :ballot_box_with_check: 2003060409-王攀
14 添加 mem_mgr.c 改进共享内存管理进程的通信机制,改用 domain socket 通信,从而代码与主进程以及计算子进程解耦。独立编译运行。 :ballot_box_with_check: 2003060411胡佳位
15 改进 fork.c 设计通信机制帮助父进程检测子进程状态,如果子进程崩溃,则重新启动子进程。 :ballot_box_with_check: 2003060103黄靖壹
16 改进 mutex1_main.c 实现多线程查找质数,结果按照从小到大顺序打印;分析、测试程序最大可用范围(堆内存、栈内存、可用线程数限制)和执行时间 :white_check_mark: 2003060425 蒋朝明
17 改进 mutex1_main.c 主线程负责打印命令提示,接受输入查找范围,调用计算线程计算,运算结束后打印结果。 :ballot_box_with_check: 2003060112 杨森
18 验证所有提交的关于 11-17 的 答案的正确性 添加 report.md 文件,格式:
git log 的 SHA, 学号, 是否正确
:ballot_box_with_check: 2003060223赵炜
19 添加 shell 或 python 脚本用来自 动测试代码可编译,自动测试 11-17 基本功能可用 在 README.md 中注明用法 :ballot_box_with_check: 2003060319 郭德英
20 基于mongoose写一个质数查找 服务程序 添加 mongoose.h, mongoose.c(来自 mongoose 程序包), server.c 文件, 合入 fork.c 中的父进程功能。
网络请求,例如:https://**/search?2-12
返回 JSON 格式{num:4,list:{2, 5, 7, 11}}
:white_check_mark: 2003060423卢相宇
21 写一个质数查找服务程序前端 与服务程序联调 添加 prime.html。要求有输入框输入查询范围,查询结果显示在页面上。 :ballot_box_with_check: 2003060120沈旭
22 基于mongoose写一个分布式质 数查找服务程序 主服务可以请求其他服务器上的服务程序完成部分查找任务 :ballot_box_with_check: 2003060121李龙岐
23 带负载均衡的分布式质数查找 服务程序 计算服务增加接口支持主服务查询进度(负载),主服务把计算任务分段,根据计算服务的空闲情况分配任务(比如只有3 个计算服务,指数查找任务被分配成了 4 段,最后一段需要等待一个服务空闲了再分配) :white_check_mark: 2003060103黄靖壹
24 基于mongoose写一个质数数据 管理服务 专门管理已经查找到的质数,结果定时存储到硬盘,接受远程查询、插入请求。
查 询 命 令 格 式 支 持 最 简 单 SQL 语 句,例如:“https://**/search?select*from2to100 插入命令格式可自行定义
:ballot_box_with_check: 2003060222钟阔
25 集成 20-24 结果,建立一个质数 查找计算服务集群,添加 docker 脚本编译运行 :ballot_box_with_check: 2003060130 林裕坤
26 管理代码库,添加脚本用来自动 测试 20-24 基本功能可用。 :ballot_box_with_check: 2003060321 翟雪睿