Search
Duplicate
🔮

운영체제의 추상화

목차
2.
: 운영체제의 추상화는 물리적인 자원(Physical resources)들을 강력하고, 사용하기 쉽게 만들어 준다.
: 가상 메모리를 사용해서 실제 메모리가 감당할 수 있는 양 보다 더 많은 크기의 프로그램을 메모리에 올릴 수 있도록 해주거나, 멀티테스킹, 동시성(concurrency) 기법을 사용해서 많은 프로세스들이 동시에 CPU를 사용할 수 있도록 해주는 역할 등이 있다
: 이 추상화된 운영체제의 기능들을, 운영체제에서는 시스템 콜(System Call API) 을 제공해 사용자가 쉽게 사용할 수 있도록 도와준다.

시스템 콜(System Call)

: 운영체제에는 유저모드, 커널모드 두 가지 모드가 존재하는데, 유저 모드에서 시스템 콜이 호출이 되면, 시스템 콜 인터페이스를 통해 커널 모드로 전환이 된다.
: 이를 모드 스위치(Mode Switch) 라 하고, 운영체제는 커널모드에서 시스템 콜을 실행 시킨 후 다시 유저 모드로 돌아가게 된다.
: 각 분야 별 시스템 콜 예시는 다음과 같다.
프로세스 제어: fork(), exit(), wait(),
파일 관리: open(), read(), write(), close()
장치 관리: ioctl(), read(), write()
정보 유지: getpid(), alarm(), sleep()
보안(Protection): chmod(),umask(), chown()

가상화

CPU 가상화(Virtualizing CPU)

소스코드
// cpu.c 파일 #include <stdio.h> #include <stdlib.h> #include <sys/time.h> #include <assert.h> #include <unistd.h> int main(int argc, char *argv[]) { if (argc != 2) { fprintf(stderr, "usage: cpu <string>\n"); exit(1); } char *str = argv[1]; while (1) { sleep(1); printf("%s\n", str); } return 0; }
C
복사
실행결과 (CPU가 하나인 환경에서 쉘로 실행)
$ gcc -o cpu cpu.c -Wall $ ./cpu A & ; ./cpu B & ; ./cpu C & ; ./cpu D & [1] 7453 [2] 7354 [3] 7355 [4] 7356 A B D C A B ...
C
복사
: CPU가 1개인 환경임에도 불구하고 마치 여러개의 프로그램이 돌아가고 있는듯한 착각을 일으킴

메모리 가상화(Virtualizaing Memory)

: 서로 다른 프로그램 두 개를 동시에 실행한 후 프로세스의 id를 주소를 출력해보면, 메모리의 주소가 똑같이 출력되는 경우가 있다.
: 이는 메모리 가상화를 이용했기 때문인데, 실제 물리적 메모리 주소는 다르지만 가상화 된 메모리 주소는 같을 수 있기 때문에 이렇게 출력되는 것이다.
메모리와 관련된 용어 정리 - TLB(Translation Lookaside Buffer): 가상 메모리 주소를 물리적인 메모리 주소로 변환할때 사용되는 캐시. - page, segmentation: 메모리 가상화를 구현하는 방법 - NUMA(Non-Uniform Memory Access): 멀티 프로세서 시스템에서 사용되는 메모리 설계 방법 중 하나
C
복사

동시성 문제(Concurrency)

: 같은 프로그램이나 시스템에서 동시에 뭔가를 하려 했을 때 생기는 문제들을 말한다.
: 예를 들어 서로 다른 두 개의 스레드가 같은 자원을 동시에 접근하려 했을 때(이를 race condition이라 한다), 하나의 스레드만 접근이 되는 경우가 있다.
: 이를 원자성(atomicity)라고 하는데, 이 원자성을 유지하기 위해 lock이 사용된다.

지속성 (Persistence)

: 유저는 데이터를 영구적으로 유지하길 원한다. RAM은 휘발성 이므로, 저장소에 데이터를 작성해 영구적으로 데이터를 유지하는 것을 지속성(Persistence)라고 한다.

운영체제 설계 목표

추상화(Abstraction): logic gate의 이해없이 프로그램을 만들 수 있도록 해주는 것
수행 능력(Performance): OS의 오버헤드를 최소화 시키는 것.
보안(Protection): 다른 프로세스가 또 다른 프로세스로 부터 독립되어 있어야 한다.
신뢰성(Reliablity)
그 외: Policy와 mechanism 분리