
어렵다 어려워……. 모르겠어……. Abstracting Physical Resources ✔️ OS가 충족해야하는 조건 1. Time-sharing : 여러 프로세스가 한정된 하드웨어(H/W) 자원을 time-sharing하며 사용할 수 있어야함 → 프로그램이 주기적으로 H/W를 양보한다면 굳이? 필요없을 것. 하지만 악의적으로 독점한 채 양보하지 않으면 다른 프로그램은 영영 H/W를 사용하지 못할 것임. 따라서 UNIX는 주기적으로 프로그램이 H/W 자원을 양보하도록 만듬. 2. Isolation : 한 프로세스의 bug나 fail이 다른 프로세스에 영향을 주면 안됨 → 직접 H/W에 접근하는 것보다 추상화된 H/W에 접근하는 것이 여러방면에서 좋음. Ex, 프로세스는 시스템콜을 사용하여 H/W에 접근..

운영체제는 하나의 물리 메모리(RAM)를 이용해 모든 프로세스를 관리한다. → 효율적으로 관리해야 함(특정 프로세스가 다른 프로세스가 로드한 데이터를 읽지 못하게 해야함) 페이징 ⇒ 메모리를 고정된 크기의 페이지로 나누어 관리하는 것. ✔️ 레지스터에 시작주소를 담아서 사용하기에는 어찌됐든 그 내용을 담을 연속된 메모리 영역이 필요하다. 연속된 메모리 영역을 확보하는 것이 어렵기에 (외부 단편화) 프로세스의 물리 주소가 연속되지 않아도 되도록 하는 것. 페이지 테이블을 이용하여 논리메모리를 실제 메모리로 변환하여 실제 메모리에 접근. (일반적으로 물리메모리는 동일한 크기의 프레임으로, 논리 메모리는 동일한 크기의 페이지로 나눔) 페이징을 통해 외부 단편화의 필요성을 피할 수 있음 외부 단편화란? 메모리의..

Sleep Implement the UNIX program sleep for xv6; your sleep should pause for a user-specified number of ticks. A tick is a notion of time defined by the xv6 kernel, namely the time between two interrupts from the timer chip. Your solution should be in the file user/sleep.c #include "kernel/types.h" #include "kernel/stat.h" #include "user/user.h" int main(int argc, char *argv[]){ if(argc < 2){ fpr..