100分求以下要求的程序。请在09.2.23号以前(包括23号)提交!

yexianyi 2009-02-21 03:01:49
Description
Create a pseudo-kernel to handle scheduling. Your scheduler kernel will then be used to manage an imitation local user network. The network has six users, any number of whom could be running threads at any time.

There are basically four different types of “threads” your scheduler will manage. Note that these threads are not real, but you are simulating them during the operation of your scheduler:
1. Logging into the network. This thread will start, then wait for two user inputs: the userid and password. This wait is uninterruptible. Once the inputs are received, it will continue running to verify the information. In most cases, the userid and password will succeed, so a new thread will be started. This thread then terminates.
2. Database query. This thread will wait for a response from the database. This wait is interruptible. Once the response is received, the thread is awakened. When the processing is complete, it terminates.
3. Printing a report. This thread runs uninterruptible. It just performs its job and then terminates.
4. Log off. This thread runs very briefly (simulating cleaning up storage) and terminates.

You will design a test run to demonstrate the functionality of the scheduler. Every fifteen seconds your scheduler should report what threads are being managed, what user they are associated with, and what state they are in. Your run should last at least three minutes. You can determine which threads run when and what users are active when. There should always be at least one active thread, and at some point all six users will have threads queued.
...全文
308 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
fibbery 2009-02-23
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 yexianyi 的回复:]
恩~经过两天的奋斗,该程序终于完成了。虽然Bug不少,但是要求的基本功能还是都实现了。真不易啊~呵呵
[/Quote]

哈哈,肯定特别有成就感!恭喜了!
yexianyi 2009-02-23
  • 打赏
  • 举报
回复
恩~经过两天的奋斗,该程序终于完成了。虽然Bug不少,但是要求的基本功能还是都实现了。真不易啊~呵呵
weimin19861015 2009-02-22
  • 打赏
  • 举报
回复
没办法了,我英语没过级,看不懂
zenny_chen 2009-02-22
  • 打赏
  • 举报
回复
呵呵,离23号不远了。先说一下思路吧,不讲太多大道理。

假设你是在PC上完成的。在嵌入式上,本人独自完成过基于Blackfin561 Dual-core DSP上的RTOS微内核,包括一个基于中断管理的线程调度,以及存储器配置管理,包括分段和分页。另外提供了很多基于双核的线程同步服务,DSR服务等。另外,在Blackfin537 DSP(单核)上还实现过Linux/Unix上很经典的Copy on write机制,很精彩。

如果仅仅是调度系统还是比较容易的。而且看了一下你的需求,其实不算太难,仅仅使用round-robin机制就可以解决问题。
因为对于6个用户来说,优先级是一样的,而且其中的操作也没有很明显的优先级区别。

1、如何用PC进行模拟:使用一个主循环作为调度循环,类似于WinMain()中的大循环。里面主要分为四个过程,每个过程可被视为一个线程。实际上就是四个主函数。所以大致的框架可以是:

while(!if_exit())
{
DoLogin();
DoGetData();
DoPrintReport();
DoLogoff();
}

2、然后,我们可以自己定义线程控制块。每个线程控制块包含一系列的状态。比如这里,你可以包含用户名、运行状态、最近登陆时间、最近退出时间等。这里主要的就是运行状态,通过这个东东,我们可以判定当前线程是否可以被打断。

struct UserThread
{
const char *userName;
int runStatus;
time_t latestLogin;
time_t latestLogout;
};

static struct UserThread userList[6];
static int currentUserListIndex;

原则上,用户密码信息需要有特殊途径进行判断,当然,你在模拟程序中也可以将用户密码信息放入线程控制块。
然后可以定义一个全局的线程列表,然后可以用一个全局索引值进行添加用户。(其实真正做线程控制块管理都是利用链表来管理的,但是这里的需求很简单,所以用数组也完全没问题。
当一个用户被加入时,你可以把用户信息移到这个列表中,然后索引值加1;每当一个用户退出时,可以调整整个列表的内容(反正就6个元素,很快就能处理的),然后索引值减1。

3、执行过程:你首先要定义一组你整个模拟程序的运行状态组一个变量表示当前运行状态是否可被打断;另一个变量表示当前是否有一个用户需要登陆。

static int sys_isInterruptable;
static int sys_isUserRequest;
static const char* logUserInfo[65536]; //用于记录报告
static int sys_currentlyProcessedUserIndex;

这个模拟程序的关键在于:当一个用户处于可被打断的状态,那么系统可以进行对其它用户进行服务,所以需要一个当前用户运行的索引,然后在线程控制块上进行来回搜索处理。
lei_zhuyan 2009-02-22
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 arong1234 的回复:]
还“提交”哪,请人帮忙就好像大老板下命令一样,现在孩子咋这样
[/Quote]

说的太对了
youhq97 2009-02-22
  • 打赏
  • 举报
回复
年青人,作业要自己做.
zenny_chen 2009-02-22
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 c4056128 的回复:]
我只能帮你翻译出来啦!


描述

创建一个伪内核处理调度。您调度内核将被用来管理本地用户模仿网络。该网络有6个用户,任何数量的人可以运行的线程在任何时候。


基本上有四种不同类型的“线程”的调度管理。请注意,这些线程是不是真实的,但您模拟行动中,他们的日程安排:

1 。登录到网络。此线程将开始,然后等待两个用户输入:该用户名和密码。这种等待是不间断。一旦收到的投入,将继续运行,以验证的信息…
[/Quote]
呵呵,一些关键性词语翻得有偏差:
This wait is uninterruptible——你翻成“这种等待是不间断”,很显然会让人造成误解。这里应该翻为“这种等待是不可被打断的”。
相应地,“这种等待是中断”应该翻为“该等待可以被打断”。

另外,“回应”应该翻成“响应”。“印刷”应该翻为“打印”。“印刷”这个词是日本人用的。
madelaop5566 2009-02-22
  • 打赏
  • 举报
回复
这么难 不会
nicknide 2009-02-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 fibbery 的回复:]
我觉得,真正思考了、动手做了,能不能做出来,其实并不重要!靠歪门邪道,其实一点成就感都没有!没意思!在其位谋其政,是学生就把本职工作做好!这是一个人的基本素质。
[/Quote]

哈哈, 思考了做不出来自然有问题, 如果是学生, 分数不保, 如果是工作,饭碗不保.
哪能说得那么轻巧了.

PS: 懒得帮 LZ 动手了, 题目全英文直接粘贴, 又不是 LZ 不懂英文, 因此一点请教的诚意都没有啊.
c4056128 2009-02-22
  • 打赏
  • 举报
回复
我只能帮你翻译出来啦!


描述

创建一个伪内核处理调度。您调度内核将被用来管理本地用户模仿网络。该网络有6个用户,任何数量的人可以运行的线程在任何时候。



基本上有四种不同类型的“线程”的调度管理。请注意,这些线程是不是真实的,但您模拟行动中,他们的日程安排:

1 。登录到网络。此线程将开始,然后等待两个用户输入:该用户名和密码。这种等待是不间断。一旦收到的投入,将继续运行,以验证的信息。在大多数情况下,用户名和密码会成功,因此一个新线程将开始。这线程然后终止。

2 。数据库查询。此线程将等待回应从数据库。这种等待是中断。一旦收到回应,线程是唤醒。当处理完成,它终止。

3 。印刷了一份报告。该线程运行不间断。这只是履行其职务,然后终止。

4 。注销。该线程运行非常简单(模拟清理存储)和终止。



您将设计的试运行证明的功能调度。每十五秒您应该报告哪些调度线程的管理,哪些用户是相关的,什么国家,他们所处的运行应至少持续3分钟。您可以确定哪些线程时运行和用户活跃时。因此应始终至少有一个积极的线程,并在某个时候所有的用户将有6个线程队列。
meetyu 2009-02-22
  • 打赏
  • 举报
回复
mark
ZhengZhiRen 2009-02-21
  • 打赏
  • 举报
回复
呵呵,懒得看了。
帮顶
Pajack 2009-02-21
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 arong1234 的回复:]
还“提交”哪,请人帮忙就好像大老板下命令一样,现在孩子咋这样
[/Quote]


是哦,,100分又有何用。。
太乙 2009-02-21
  • 打赏
  • 举报
回复
恩~~~

netsocket 2009-02-21
  • 打赏
  • 举报
回复
友情up
sunyuqian 2009-02-21
  • 打赏
  • 举报
回复
先翻译出来再说
arong1234 2009-02-21
  • 打赏
  • 举报
回复
还“提交”哪,请人帮忙就好像大老板下命令一样,现在孩子咋这样
flylovejings 2009-02-21
  • 打赏
  • 举报
回复
呵呵!!

有时间了翻译来做下!!!

kobemadi 2009-02-21
  • 打赏
  • 举报
回复
这个题目太变态了,我们都是来学习的.不是来发明的
何况还有那么多讨厌的英文
yexianyi 2009-02-21
  • 打赏
  • 举报
回复
补充说明:要求用C语言实现!
加载更多回复(10)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧