Skip to content
Snippets Groups Projects
Commit 6312122c authored by Tom Feng's avatar Tom Feng
Browse files

Before class

parent 85b43580
No related branches found
No related tags found
1 merge request!16Withtime
#ifndef K2P_H
#define K2P_H
int Sender();
int Receiver();
int PerfTest();
#endif
#ifndef K2P_H
#define K2P_H
int Sender();
int Receiver();
int PerfTest();
#endif
#ifndef K2PERFTEST_H
#define K2PERFTEST_H
#endif
\ No newline at end of file
int Sender();
int Receiver();
int PerfTest();
#endif
#ifndef TYPES_H
#define TYPES_H
#define K2PTEST 1
#define SUCCESS 0
#define FAILURE -1
......
......@@ -30,6 +30,9 @@ ipc.s: ipc.c
k2.s: k2.c
$(XCC) -S $(CFLAGS) k2.c
k2PerfTest.s: k2PerfTest.c
$(XCC) -S $(CFLAGS) k2PerfTest.c
kernel.s: kernel.c
$(XCC) -S $(CFLAGS) kernel.c
......@@ -85,6 +88,9 @@ ipc.o: ipc.s
k2.o: k2.s
$(AS) $(ASFLAGS) -o k2.o k2.s
k2PerfTest.o: k2PerfTest.s
$(AS) $(ASFLAGS) -o k2PerfTest.o k2PerfTest.s
kernel.o: kernel.s
$(AS) $(ASFLAGS) -o kernel.o kernel.s
......@@ -134,6 +140,9 @@ ipc.a: ipc.o
k2.a: k2.o
$(AR) $(ARFLAGS) $@ k2.o
k2PerfTest.a: k2PerfTest.o
$(AR) $(ARFLAGS) $@ k2PerfTest.o
kernel.a: kernel.o
$(AR) $(ARFLAGS) $@ kernel.o
......@@ -165,13 +174,14 @@ tools.a: tools.o
$(AR) $(ARFLAGS) $@ tools.o
install: buffer.a bwio.a context-switch.a hash-table.a ipc.a kernel.a k2.a nameserver.a priority-q.a rps.a scheduler.a syscall.a syscall-handler.a td.a timer.a tools.a
install: buffer.a bwio.a context-switch.a hash-table.a ipc.a kernel.a k2.a k2PerfTest.a nameserver.a priority-q.a rps.a scheduler.a syscall.a syscall-handler.a td.a timer.a tools.a
mv buffer.a libbuffer.a
mv bwio.a libbwio.a
mv context-switch.a libcs.a
mv hash-table.a libht.a
mv ipc.a libipc.a
mv k2.a libk2.a
mv k2PerfTest.a libk2p.a
mv kernel.a libkernel.a
mv nameserver.a libns.a
mv priority-q.a libpq.a
......
......@@ -29,13 +29,10 @@ int doSend(KernelStruct* Colonel, int TaskID, void* Msg, int MsgLen, void* Reply
bwprintf(COM2,"doSend: Task %d SendMsgLen:%d\n\r",SenderTask->TaskID,MsgLen);
int Result;
bwprintf(COM2,"doSend: Guess1\n\r");
AP* Args = ReceiverTask->Args;
bwprintf(COM2,"doSend: Guess2 %d\n\r",Args->arg1);
int *ReceiverSlot = (int *)Args->arg1;
bwprintf(COM2,"doSend: Guess3\n\r");
int ReceiverLen = (int)(Args->arg2);
if (ReceiverTask->TaskState == SendBlocked) {
AP* Args = ReceiverTask->Args;
int *ReceiverSlot = (int *)Args->arg1;
int ReceiverLen = (int)(Args->arg2);
bwprintf(COM2,"doSend: Receiver %d SendBlocked\n\r", TaskID);
Result = byteCopy(ReceiverSlot, Msg, ReceiverLen, MsgLen);
if (Result == FAILURE){
......@@ -46,12 +43,18 @@ int doSend(KernelStruct* Colonel, int TaskID, void* Msg, int MsgLen, void* Reply
SenderTask->TaskState = ReplyBlocked;
ReceiverTask->TaskState = Ready;
pushToScheduler(Colonel, ReceiverTask);
#if K2PTEST == 0
BufferPopHead(AllSendQ[TIDIndex]);
#endif
}
else {
bwprintf(COM2,"doSend: Receiver %d not Received, Task %d RBLocked\n\r",TaskID,SenderTask->TaskID);
SenderTask->TaskState = ReceiveBlocked;
#ifndef K2PTEST == 0
bwprintf(COM2,"doSend: inside k2\n\r");
FeedBuffer(AllSendQ[TIDIndex],(void *)(SenderTask->TaskID));
#endif
bwprintf(COM2,"doSend: Guess 4, after feed buffer\n\r");
}
Colonel->Active = NULL;
return SUCCESS;
......
#include <bwio.h>
#include <types.h>
#include <k2PerfTest.h>
#include <timer.h>
#include <syscall.h>
int Sender() {
int MyID = MyTid();
bwprintf(COM2,"Sender: %d runs\n\r",MyID);
int ReceiverTID, i, StartTime, EndTime, Res;
int Sum = 0, Average;
char* SendMsg = "water water water loo loo loo, water water water loo loo loo, water water water loo loo loo cs452 cs452";
ReceiverTID = 1;
char ReplyMsg[32]; // 4 bytes
//char ReplyMsg[256]; // 64 bytes
//Clock* c;
//ClockInit(c);
//ReceiverTID = WhoIs("Rcvr");
for (i = 0; i < 100; ++i) {
//ClockUpdate(c);
//StartTime = c->ClockCount;
Res = Send(ReceiverTID, (char*)SendMsg, 32, ReplyMsg, 32);
if (Res != 32) {
bwprintf(COM2, "Send has Errors\n\r");
return Res;
}
//ClockUpdate(c);
//EndTime = c->ClockCount;
//Sum += (EndTime - StartTime);
}
//Average = Sum/100;
bwprintf(COM2, "Send Time: \n\r", Average);
Exit();
}
int Receiver() {
int MyID = MyTid();
bwprintf(COM2,"Receiver:%d runs\n\r", MyID);
int SenderTID, i, StartTime, EndTime, Res;
int Sum = 0, Average;
char ReceiveMsg[32];
char ReplyMsg[32]; // 4 bytes
Clock* c;
SenderTID = 2;
bwprintf(COM2,"Receiver: Guess1\n\r");
ClockInit(c);
// Res = RegisterAS("Rcvr");
//Reply(SenderTID, ReplyMsg, sizeof(ReplyMsg));
StartTime = 0;
bwprintf(COM2,"Receiver: Before Loop\n\r");
for (i = 0; i < 100; i++) {
ClockUpdate(c);
Res = Receive(SenderTID, (char*)ReceiveMsg, 32);
if (Res < 0) {
bwprintf(COM2, "Receive has Errors.\n\r");
return Res;
}
ClockUpdate(c);
EndTime = c->ClockCount;
Reply(SenderTID, (char*)ReplyMsg, Res);
Sum += (EndTime-StartTime);
}
Average = Sum / 100;
bwprintf(COM2, "Receive Time: %d\n\r", Average);
Exit();
}
int PerfTest() {
int SenderTID, ReceiverTID, NSTID, SendFirst = 1;
AP Args1, Args5;
char* SendMsg, ReplyMsg;
Args5.arg0 = (void *) Prio5;
Args5.arg1 = (void *) (&Receiver);
//Args1.arg0 = (void *) Prio1;
//Args1.arg1 = (void *) (&Receiver);
Args1.arg0 = (void *) Prio3;
Args1.arg1 = (void*) (&Sender);
//NSTID = Create(&Args5);
ReceiverTID = Create(&Args5);
//Args5.arg1 = (void*)(&Sender);
SenderTID = Create(&Args1);
bwprintf(COM2,"PerfTest exiting...\n\r");
//Send(ReceiverTID, (void*)SendMsg, sizeof(SendMsg), (void*)Reply, sizeof(ReplyMsg));
Exit();
}
......@@ -53,7 +53,7 @@ int RPSServer(){
int QStorage[MAX_NUM_TD];
SendQ.Storage = (void *)QStorage;
SendQ.Size = MAX_NUM_TD;
//Pass()
Pass();
SendQ.Length = 0;
SendQ.Head = 0;
SendQ.Tail = 0;
......
......@@ -32,7 +32,8 @@ void handlerCreate(KernelStruct* Colonel) {
int handlerSend(KernelStruct* Colonel) {
int result;
AP* Args = Colonel->Active->Args;
bwprintf(COM2,"handlerSend: Args->arg1: %d\n\r",Args->arg1);
int A0 = (int)Args->arg0;
int A2 = (int)Args->arg2;
int A4 = (int)Args->arg4;
......
......@@ -74,7 +74,7 @@ int Receive (int TaskID, void* Msg, int MsgLen) {
Args.arg0 = (void *)(TaskID);
Args.arg1 = (void *)(Msg);
Args.arg2 = (void *)(MsgLen);
bwprintf(COM2,"Receive_USR: TaskID%d, Msglen%d\n\r",TaskID,MsgLen);
int Return = ActualReceive(&Args);
return Return;
}
......
#include <bwio.h>
#include <timer.h>
#include <ts7200.h>
void ClockInit(Clock *MyClock)
{
bwprintf(COM2,"Entered Clock init\n\r");
MyClock->ClockCount = 0;
MyClock->LastTimerValue = CLOCK_LOAD_VALUE;
unsigned int* Clock3LoadRegister = (unsigned int *)(TIMER3_BASE + LDR_OFFSET);
......@@ -12,6 +14,7 @@ void ClockInit(Clock *MyClock)
*Clock3LoadRegister = CLOCK_LOAD_VALUE;
// enable clock
*Clock3ControlRegister = ENABLE_MASK | ClockConfig;
bwprintf(COM2,"clock init!!!!\n\r");
}
void ClockUpdate(Clock *MyClock)
......
......@@ -24,11 +24,20 @@ all: main.s main.elf
main.s: main.c
$(XCC) -S $(CFLAGS) main.c
perfmain.s: perfmain.c
$(XCC) -S $(CFLAGS) perfmain.c
main.o: main.s
$(AS) $(ASFLAGS) -o main.o main.s
perfmain.o: perfmain.s
$(AS) $(ASFLAGS) -o perfmain.o perfmain.s
main.elf: main.o
$(LD) $(LDFLAGS) -o $@ main.o -lk2 -lsysh -lipc -lrps -lns -lbuffer -lsys -lsche -lcs -lpq -lkernel -ltd -lht -ltools -ltimer -lbwio -lgcc
perfmain.elf: perfmain.o
$(LD) $(LDFLAGS) -o $@ perfmain.o -lk2p -lsysh -lipc -lbuffer -lsys -lsche -lcs -lpq -lkernel -ltd -lht -ltools -ltimer -lbwio -lgcc
clean:
-rm -f *.elf *.s *.o
#include <k2PerfTest.h>
void HelloWorld() {
bwprintf(COM2, "Hello World\n\r");
}
void PerfTest() {
int Task1ID, Task2ID;
int i;
char SendMsg[6] = "CS452";
int SendMsgLen = 6, ReplyMsgLen = 6;
char Reply[6];
AP* Args4;
Args4->arg0 = (PrioLvl) Prio4;
Args4->arg1 = (void* ) (&HelloWorld);
Task1ID = Create(&Args4);
Task2ID = Create(&Args4);
for (i = 0; i < 10; i++) {
Send(Task1ID, SendMsg, SendMsgLen, ReplyMsgLen,
}
}
\ No newline at end of file
......@@ -7,6 +7,7 @@
#include <syscall-handler.h>
#include <scheduler.h>
#include <td.h>
#include <timer.h>
#include <types.h>
extern Buffer*** TotalSendQ;
......
#include <buffer.h>
#include <bwio.h>
#include <k1.h>
#include <kernel.h>
#include <priority-q.h>
#include <k2PerfTest.h>
#include <syscall.h>
#include <syscall-handler.h>
#include <scheduler.h>
#include <timer.h>
#include <td.h>
#include <types.h>
extern Buffer*** TotalSendQ;
int main()
{
KernelStruct Colonel;
int i, Status, req;
TD* Next;
static Buffer* AllSendQ[MAX_NUM_TD];
*(TotalSendQ) = AllSendQ;
//Buffer* SendQs[MAX_NUM_TD];
bwprintf(COM2,"Main AllSendQ Address%d\n\r",AllSendQ);
InitSwi();
kernelInit(&Colonel);
TD* FirstUserTask= CreateTask(&Colonel, Prio5, (void *) (&PerfTest));
pushToScheduler(&Colonel, FirstUserTask);
TD* Task;
int ReturnValue = 0;
Clock* C;
ClockInit(C);
int Start = 0;
FOREVER {
if(Colonel.Active == NULL){
ReturnValue = 0;
Task = getNextTaskScheduler(&Colonel);
}
else{
Task = Colonel.Active;
ReturnValue = Task->RetVal;
}
ClockUpdate(C);
if(Task == NULL) break;
//bwprintf(COM2,"main: Task%d, Priority: %d\n\r", Task->TaskID,Task->TaskPriority);
req = Activate(&Colonel,Task);
ClockUpdate(C);
Handle(&Colonel, req);
}
int end = C->ClockCount;
bwprintf(COM2,"Clock Total: %d\n\r",end-Start);
return 0;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment