Skip to content

Instantly share code, notes, and snippets.

@dangkhoasdc
Created May 3, 2013 16:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dangkhoasdc/5510645 to your computer and use it in GitHub Desktop.
Save dangkhoasdc/5510645 to your computer and use it in GitHub Desktop.
Phương thức được thêm vào trong lớp Machine của đồ án Nachos. Công dụng: Chuyển đổi vùng nhớ từ User mode sang kernel mode và ngược lại.
char* Machine::User2System(int virtAddr, int limit)
{
int i;
int ch;
char* kernelBuf = NULL;
kernelBuf = new char[limit+1];
if (kernelBuf == NULL)
{
return kernelBuf;
}
memset(kernelBuf,0, limit+1);
for (i = 0; i < limit; ++i)
{
ReadMem(virtAddr+i, 1, &ch);
kernelBuf[i] = ch;
if (ch == 0) break;
}
return kernelBuf;
}
int Machine::System2User(int virtAddr, int len, char* buffer)
{
if (len < 0) return -1;
if (len == 0) return len;
int i = 0;
int ch = 0;
do {
ch = (int) buffer[i];
WriteMem(virtAddr+i, 1, ch);
i++;
} while (i<len && ch != 0);
return i;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment