Labをクリア
11417 ワード
Lab 4
int 32とuint 32の範囲は?
2^31 -1 >= int32 >= -(2^31)
2^32 -1 >= uint32 >= 0
priority bitが-8~+8だとQtabで何位?
5ビット(11000~01000)
次の関数のパラメータがbadnumbersのmacroであるかどうかを確認します.
pid32 getfirst(qid16 q)
pid32 getlast(qid16 q)
pid32 getitem(pid32 pid)
getfirstとgetlastの開始点でisbadqid(q)を呼び出します.次にgetitemでisbaddpid(x)を呼び出します.#define isbadpid(x)
( ((pid32) (x) < 0 || ((pid32) (x) >= NPROC) ||
(proctab[(x)].prstate == PR_FREE) )
/* pid가 0보다 작거나 NPROC 이상일 때,
(즉, proc table 범위를 넘어섰을 때)
혹은 이미 해제된 (PR_FREE) process일 때
*/
#define isbadqid(x) ( ((int32) (x) < 0 || (int32)(x) >= NQENT -1)
/* qid가 0보다 작거나 NQENT 이상일 때,
(즉, Qtab 범위를 넘어섰을 때)
*/
50+20 x 2(細い麻の布の頭、尾)+(1+1)x 2(ready list,sleep list head,tail)
= 94
List個数はhead、tailに2を乗じなければならない
54 - 30 = 24
ここlistのheadとtailの数は2倍で、
12個のlist(1個ready list、1個sleep list、10個の細い麻布リスト)
$ mkdir temp
tempフォルダの作成
$ cd temp
$ cp/home/xinu/xinu/system/main.c f1.txt
tempからxinuシステムのmainに移動cはf 1である.txtでtempフォルダにコピー
$ vi lab4.c
lab4.cの作成
#include <fcntl.h>
#include <stdio.h>
extern void copy(int, int);
char buffer[2048];
int version = 1;
int main(int argc, char *argv[]) /* argc : 운영체제가 이 프로그램을 실행했을 때 전달되는 인수의 갯수. 프로그램을 실행할 때 인수를 전달받을 수 있음(도스에서 파일 카피, 이동과 같은 명령 시행 시 처럼) argv 갯수 (argv의 첫번째는 무조건 프로그램 실행 경로라서 무조건 1개이상), *argv[] : main 함수에 전달되는 실제적인 데이터. */
{
int fdold, fdnew;
if (argc != 3) { /* 명령 라인의 인수가 3개가 아니면, 에러 */
printf("Usage: a.out f1 f2\n”);
exit(1);
}
fdold = open(argv[1], O_RDONLY); /* open source file argv[1] read only */
if (fdold == -1) { /*fdold 파일 식별자가 반환되지 않았을 때, 에러*/
printf ("cannot open file %s\n", argv[1]);
exit(1);
}
fdnew = creat(argv[2], 0666); /* create target file argv[2] rw for all */
if (fdnew == -1) { /*fdnew 파일 식별자가 생성 되지 않았을 때 에러*/
printf ("cannot create file %s\n", argv[2]);
exit(1);
}
copy (fdold, fdnew); /*fdnew를 fdold로*/
exit(0); /* 정상 종료*/
}
void copy (int old, int new)
{
int count;
while ((count = read(old, buffer, sizeof(buffer))) > 0) /*read(open() 시스템 콜로 열린 파일을 가리키는 파일 지정 번호, 파일에서 읽은 데이터를 저장할 메모리 공간(void *buf), 읽을 데이터의 크기(Byte 단위)) : 파일 읽기 성공했을 때(EOF 아닐 때) 0보다 큰 수
즉, old 파일이 EOF되지 않는다면, while문은 계속 동작*/
write (new, buffer, count); /*write(open() 시스템 콜로 열린 파일을 가리키는 파일 지정 번호, 파일에 쓸 데이터를 저장하고 있는 메모리 공간, 파일에 쓸 데이터의 길이): 파일 쓰기 성공했을 때 0 반환*/
}
/*즉, copy function은 old 파일에서 read해 온 내용을 buffer에 담아 두었다가, new file에 write해주는 역할*/
$ gcc lab4.cコンパイル
$ ./a.out f1.txt f2.txt
lab4.コンパイルcは、上記コードのパラメータf 1としてa.outを生成する.txtとf 2もしあなたが私にtxtをくれたら、何も現れません.f 2.txtにf 1を加える.txtコンテンツがコピーされました
grep:検索コマンド
grepコマンド
grep NPROC *
xinuフォルダをxinu lab 5フォルダにコピーする
$ cp -r xinu xinu_lab5
Reference
この問題について(Labをクリア), 我々は、より多くの情報をここで見つけました https://velog.io/@i-zro/Lab-정리テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol