시스템 (8) 썸네일형 리스트형 RAID(Redundant Array of Inexpensive Disk) 평가하기 RAID란 Redundant Array of Inexpensive Disks의 약자로, 상대적으로 저렴한 디스크 여러개를 사용하여 하나의 fake logical disk를 구성하는 방식이다. RAID는 capacity, reliability, performance의 3가지 척도로 성능을 평가할 수 있다. 이때 capacity는 "응용이 얼마나 넓은 공간을 사용할 수 있는가?", reliability는 "몇개의 disk의 데이터를 잃어도 문제없는가?", performance는 "각각의 workload에 따른 속도가 어떠한가?"를 의미한다. 아래 예시에서 사용할 기호는 다음과 같다. N = 디스크 개수 C = 디스크 1개의 용량 S = 디스크 1개가 sequential workload를 받을 때의 처리량 (.. [OS] Page size <-> offset, page 개수 계산하기 일반적인 page size인 4KB로 생각해보자. 4KB = 2^12B 즉 한 page에 2^12개의 바이트가 저장될 수 있다. 각각의 바이트를 구분하려면 0 ~ 2^12의 숫자가 필요하다. 즉 12bit가 필요한 것이다. offset은 한 page 내부에서의 위치를 표현하기 위한 것이므로 offset으로 12bit를 사용하게 된다. 이번엔 page단위로 살펴보자. (내부가 아닌) 어느 4byte짜리 주솟값을 생각하자. 4byte는 32개의 bits로 이루어져 있고, 이 32개의 bit로 virtual addr를 저장한다. 이때 하위 12bit는 페이지 내부에서의 offset을 담게 되는 것이지, 몇번째 page인지를 의미하는 page number를 담을 때는 그 보다 상위 bit들만을 사용하게 될 것이.. [시스템 프로그래밍] exit / fork / wait / execve Process Terminating : exit syscall process가 실행을 마치는 과정은 사람에 따라 워딩을 다르게 하지만 어쨌든! 로 이루어져 있다. 그 중 종료(terminating) 에 대해 알아보겠다. 우선 process가 terminating하는 원인은 크게 두가지다. 종료하라는 signal을 받거나, exit syscall을 호출하거나. 이때 exit syscall에 대해 잘 정리해두고 기억해야한다. void exit (int status) process가 이 exit syscall을 호출하면, kernel이 status변수에 종료 상태를 저장하면서 해당 process를 terminate 시켜준다. (일반적으로 status값이 0이면 정상 종료, 0이 아니면 비정상 종료이다.) 자연.. [시스템 프로그래밍] error handling wrapper / pid / process states Error Handling Wrapper system-level operations는 대부분 에러가 난다. 그래서 에러 핸들링을 명시적으로 할 필요가 있다. 에러 핸들링 코드를 줄줄 써놓으면 전체 코드가 복잡해지니, 에러를 핸들링하는 wrapper함수를 만들어보자. Linux는 에러가 나면 -1을 return하고, 전역변수 errno에 그 원인을 적어준다. void reporting_error(char *error_msg){ fprintf(stderr, "%s : %s\n", error_msg, strerror(errno)); //에러 메시지 : 에러 넘버 exit(1); //비정상 종료 } if( (pid = fork()) < 0) { reporting_error("fork error"); } PID .. [시스템 프로그래밍] Process와 Context Switching Process - an instance of a running program - a context(state) for the program execution 각 process는 실행되기 위해서 1. CPU 와 CPU 내부의 registers 2. memory 내부의 stack, heap, data, code의 저장공간 이 필요하다. Process라는 개념이 주는 2가지 이득 (abstractions) ① Logical control flow : 각 process는 CPU를 독점하는 것처럼 보인다. by context switching ② Private address space : 각 process는 memory를 독점하는 것처럼 보인다. by virtual memory Kernel - a shared c.. [시스템 프로그래밍] Exceptional control flow의 종류 1. control flow 컴퓨터가 켜진 순간부터 전원이 꺼질 때까지, 컴퓨터의 뇌라 할 수 있는 CPU는 그저 instructions 을 읽고 수행할 뿐이다. 이때 이 instructions의 배열이 바로 CPU의 control flow이다. 2. exceptional control flow CPU가 항상 instructions를 나열된 순서대로 수행하는 것은 아니다. 순서가 바뀌는 것과 관련하여 두가지 개념이 있다. 바로 program state과 system state이다. program state는 variable의 value를 뜻한다. 변수의 값에 따라 코드의 바로 밑에 line을 수행하는 것이 아니라 다른 line으로 이동하기도 하는.. 이러한 상황에서 instructions의 수행 순서가 .. [OS_Memory] VPN&offset 계산 기초 공부하면서 정리하는 거라서 틀린 내용이 있을 수 있습니다. 댓글로 피드백 주시면 감사합니다! 1. Logical Address Format = VPN + Offset이다. logical addr는 32bit, page size가 4K일때, VPN은 몇 bit? page size가 4KB란... 2^12Bytes다. 한 page, frame의 size가 2^12Bytes라는 것은 그 이유나 원리는 모르겠지만.... 왜 byte->bit?? 그 page를 표현하기 위해서 12bit가 필요하다는 걸 의미한다. 즉 logical addr 상에서 offset이 12bit를 차지한다는 것. 따라서 VPN = 32 - 12 = 20bit다. VPN이 20bit라는 것은 page가 2^20개 존재한다는 뜻이다. 즉 p.. [pintos_project1&2] system call의 흐름 연결 cf) 23.10.4 updated 또다시 정리해보는 흐름 > pintos --filesys-size=2 -p (..../경로) -a (실행파일 이름) -- -f -q run 'exec-bad-arg' 실행파일이 Pintos disk에 올라오고, filesystem으로 복사된다. 핀토스 운영체제가 시작되면서 run.., process_execute.. 등등의 흐름을 따라 'exec-bad-arg'를 실행할 자식 스레드를 생성한다. 'exec-bad-arg'를 파싱한 후 user stack에 쌓는다(passing) 실행파일의 instruction들이 실행되는데, c코드로 치면 main의 파라미터인 argc, argv로 내가 쌓은 user stack이 들어온다. 실행파일의 instruction 중 하나가 w.. 이전 1 다음