하드웨어를 감싸고 있는 것(Hardware Encapsulation). 즉 하드웨어와 응용프로그램 간의 인터페이스 역할을 하는 시스템 소프트웨어운영체제도 소프트웨어의 일종이므로, 부팅이 되면 디스크에 있던 프로그램이 메모리로 올라와서 상주해야 한다. 그러나 운영체제와
프로그래머에 의한 수동 프로세싱메모리 스위치로 인풋컴파일러 & 유틸리티는 이후에 추가됨One by One 시스템Card Reader: 카드에 구멍을 내는 형식으로 프로그램을 짜고, 이걸 Card Reder에 올림Job: 프로그램의 실행을 담당(CPU와 유사한 역할)Li
커널의 기능1\. Handling Resources2\. Hardware Encapsulation메모리는 유저 스페이스와 커널 스페이스로 구분된다. 유저 스페이스와 커널 스페이스는 분리되어 서로 침범하지 않는다.대부분의 코드와 Library Function은 유저 스페
특권 명령어 (Privileged Instructions): 명령어들 중 유저가 사용하면 안되는 명령어를 특권 명령어라고 한다. (ex. halt: 기계를 꺼버리는 명령어)메모리 사용 범위: 포인터가 다른 프로세스의 주소를 가리키면 그 프로세스가 망가질 수 있으므로,
운영체제에서 Multi-tasking이란, 여러 개의 프로세스들이 CPU 시간을 나눠서 사용하며, 동시에 돌아가는 것을 의미한다. 그런데, 이때 동시에 돌아간다는 말은 영어로 'Concurrent' 혹은 'Parallel' 로 해석할 수 있는데, 이 둘의 의미는 조금
I/O System에서 디바이스(키보드, 디스크)는 파일처럼 간주되어 관리된다. 사용자가 API(open/close, read/write)를 call하면, I/O request queue에 이 작업들이 쌓인다. 그러나 완전히 순서대로 쌓이는 것은 아니고, 빨리 끝날 수
기계 오작동 인터럽트정전으로 인한 인터럽트클락 인터럽트: 주기적으로 돌아야하는 프로세스가 있을 때 컴퓨터가 시간을 재는 방법이 바로 이 클락 인터럽트를 이용하는 것이다. CPU 속 진동자가 일정한 주기(1/1000초..)마다 Interrupt를 보낸다. 이 틱을 가지고
disable interruptcontext save디바이스 컨트롤러에 interrupt를 받았다는 ACK를 보냄인풋의 경우: 디바이스 컨트롤러에서 데이터를 받음아웃풋의 경우: 데이터를 디바이스 컨트롤러에 줌다음 I/O를 시작시킴인터럽트를 enable 시키고 아까 잘린
프로세스(Process): 돌고 있는 프로그램 프로세스마다 process ID(PID)가 존재. 커널은 PID를 이용해 프로세스를 관리Running: CPU를 받아서 돌고 있는 상태Reddy: time slice가 끝났거나 프로세스 간의 우선 순위에서 밀려서 CPU를
커널이 프로세스 관리를 하기 위해서는 관리를 하기 위한 정보가 필요한데, 이를 메타 데이터라고 한다.프로세스 관리를 위한 메타 데이터를 가지고 있는 곳을 프로세스 컨트롤 블락(Process Control Block, PCB)라고 한다.프로세스의 일련번호(process
CPU time burst 혹은 Interrupt로 인해서 CPU가 프로세스를 떠날 때에는 context를 저장한 후 떠나야 이후 덜 마친 작업을 이어서 할 수 있다.이때, text, data, heap, stack과 같은 user-level context는 메모리에서
System call프로세스가 syscall을 하면 프로세스가 trap되어 kernel 안으로 들어간다.하드웨어 인터럽트하드웨어 인터럽트가 발생하면 실행 중이던 프로세스가 중단되고 인터럽트 핸들러로 간다.Fault / Exception0으로 나누거나 null point
디스크에서 데이터를 가져올 때에는 1byte만 필요하더라도 무조건 4kb 단위로 가져온다. 이때 이 가져온 4kb의 데이터를 저장해두는(캐싱하는) 위치가 바로 페이지 캐시이다.따라서 Disk I/O가 필요한 경우에는 늘 페이지 캐시에서 먼저 찾아본 후 없으면 그때 I/
쓰레드는 경량급 프로세스이다. 포크할 때 메모리를 복제하는 중량급 프로세스와 달리, 쓰레드는 data, heap, stack, open file 등 모든 부분을 공유하기 때문에 시간이 적게 걸리고, 메모리도 적게 든다.call stack은 function call을 했
Critical Section은 Race Condition에서 생기는 문제 구역이다.예를 들어,Thread1에counter += 1;Thread2에counter -= 1;이라는 operation이 있다면, 이때 이 라인들은 크리티컬 섹션이 된다. 이 부분이 크리티컬 섹
어떤 프로세스의 진행이 다른 프로세스의 진행에 의존적인 상황에서, 두 프로세스가 알고있는 정보를 일치시키는 것.Synchronization은 critical section에 들어갈 수 있는 인원을 제한하는 것으로, 모든 shared resource(전역변수, 버퍼, 큐
shared resource에 대한 접근 패턴은 read/write 두 가지로 나뉜다. 따라서, read/write에 다 mutual exclusion을 하는 것은 퍼포먼스를 떨어뜨릴 수 있다.그래서 Reader's Lock과 Writer's Lock을 나누는 것이다.
Deadlock은 굶어 죽을 때까지 풀리지 않는 교착 상태를 의미한다. 예를 들어 위와 같은 두 프로세스가 있다면, 평상 시에는 프로세스1이 A에 대해 락을 걸고 들어간 후, B에 대해 락을 걸고 들어가고, 프로세스2는 B의 락이 풀리기를 기다려서 들어갔다가 A의 락이
Signal은 유저 레벨(OS 레벨 X)에서의 인터럽트이다. 시그널은 asynchronous(언제 들어올지 모르는) urgent event를 다룬다. 프로세스는 interrupt가 들어와서 커널 모드로 trap한 후 할 일을 마치고 유저 모드로 돌아가기 직전에 시그널
User's View \-계층적 파일 시스템 \-Logical I/OKernel's View \-수평적 파일 시스템 \-Physical I/O (커널 입장에서는 파일에 일련번호가 있을 뿐 디렉토리나 계층적 구조가 없다) 파일 시스템은 OS마다 달라지는 부분이
파일 I/O는 보통 대부분의 언어에 Standard I/O Library로 구현되어있다.(fopen(), fread(),..)그리고 이런 Standard I/O Library를 call하게 되면, 이 라이브러리들은 내부적으로 커널이 구현해둔 system call(ope
Bootstrap Loader: 부팅할 때 커널을 디스크에서 메모리로 올려주는 Loader. 디스크 partition의 가장 앞쪽에 위치한다.Super Block: 파일을 만들었다 지웠다하면 디스크에 군데군데 빈 부분이 많이 생기는데, 이처럼 비어있는 영역에 대한 정보
디스크 I/O를 할 때에는 항상 페이지 캐시에서 먼저 찾아본다. 그런데 이처럼 파일을 오픈하는 경우 파일의 inode를 디스크에서 메모리로 가져와야하기 때문에, inode 역시 캐싱을 해준다.파일의 종류(regular/directory/special...)파일의 오너
예를 들어, /os/test.cpp와 같이, 루트 디렉토리에 속한 os 디렉토리 아래의 test.cpp라는 파일을 찾고자 한다면,위의 표에서 일단 루트 디렉토리에 속한 모든 파일(디렉토리 파일)들을 살펴보며 os라는 디렉토리 파일을 찾아야하고, 그 os라는 디렉토리에
저널링은 파일에 write하기 전과 후에 3가지 정보(intent)를 journal에서 보관해주는 것을 말한다.이때 3가지 정보란,data blocksuper blockpointer block를 뜻한다.데이터 블락은 실제 변경된 파일의 내용을 의미하고,슈퍼 블락은 디스