1.7 OS는 하드웨어를 관리한다
Layer view of a computer system |
---|
Application Programs |
Operating System |
Processor | Main Memory | I/O Device |
소프트웨어(Application Programs) 가 하드웨어(Processor, Main Memory, I/O Device) 를 이용하기 위해서는 OS 를 반드시 거쳐야 한다.
위의 목적을 이루기 위해, 아래와 같은 추상화가 이루어진다.
즉, files 는 I/O devices 의 추상화이고,
Virtual Memory 는 Main Memory, I/O devices 의 추상화,
Processes 는 Processor, Main Memory, I/O devices 의 추상화이다.
현대의 OS는 프로그램에 대해 다음과 같은 환상 을 준다.
"프로세서" 라는 개념을 통해 위와 같은 착각을 일으킬 수 있었다.
즉, "프로세서" 와 "프로그램" 은 다른 개념이다.
프로세스는 서로 배타적으로 하드웨어를 이용하면서, 동시에 여러개의 프로세스가 작동하는 것처럼
"보인다." "동시에" 라는 의미는 사실 한 프로세스의 명령어가 다른 프로세스의 명령어들 사이에 끼어들어서 작동하는 것으로 구현된다.
실제로, 보통 프로세스는 CPU의 개수보다 많이 돌아간다.
위의 "동시에" 작동하는 것처럼 보이기 위해 사용하는 각 프로세스간의 명령어 간 움직임은
멀티프로세서(
남은 논의에서는 일단 배제한다.(1.9.2 절에서 다시 언급된다.)
OS는
이 상태정보를
이 상태 정보에는 PC(
여러 프로세스를 동시에 작동시키기 위해,
프로세스에서 필요한 다음 명령어 사이사이에 다른 프로세스의 명령어를 실행한다.
이 때 온전한 실행을 위해, 프로세스의 상태 정보를 수집, 추적하는데, 이를
해당 내용을 hello
프로그램 실행에 적용해보자.
처음에는 shell 프로세스가 동작중이다. ./hello
를 통해 실행시키면,
./hello
에 대한 프로세스가 생성되며 해당 프로세스가 종료되면 다시 shell 프로세스로 돌아온다.
프로세스 간의 전환은
프로세스가 OS에게 특정한 요청을 할 때는
시스템이 프로세스를 제어하기 위해 사용하는 코드와 자료구조의 모음.
프로세스가 아닌 운영체제의 일부이다.
프로세스는
JS: 실행 컨텍스트, golang: context 패키지
JS에서는 실행 엔진이 코드를 실행하기 위해 필요하며, golang 은 다른 고루틴에게 정보 전달용이다.
즉, 다른 함수나 엔진 등 외부에 정보를 전달하는 목적으로 사용된다.
OS 에서도 마찬가지로, 다른 프로세스로 넘어가기 위해 기존의 프로세스를 보존하기 위한 정보를
비슷한 느낌의 용어로
참고자료: inpa 찬양해
잦은
프로세스 전환을 위해서는 해당하는 프로세스의
비슷하게 스레드에서도
스레드에서는
이는 프로세스와는 달리(프로세스도 공유하는 방법이 존재하긴한다.) 스레드는 자원을 공유하기 때문에,
이에 대한 동시 접근이 가능하며, 이로 인해 잘못 업데이트 된 경우,
프로세스를 여러개의 실행 단위로 나눈 것을
하나의 프로세스에서
여러 프로세스보다 데이터를 공유하기 편하기 때문에, 효율적이며 점점 중요도가 올라가고 있다.
이를 통해 각각의
이는
(주소는 "아래에서 위" 방향으로 증가한다.)
가장 위는 모든 프로세스에서 공통인 OS의 코드와 데이터가 존재한다.
아래 쪽에는 유저에 의해 정의된 코드와 데이터가 존재한다.
이러한 추상화를 통해, 프로세스는 메모리를 특정한 목적으로 분리된 영역으로 이루어진 것처럼 본다.
후에 자세히 다루지만, 여기서 간단하게 다룬다. (밑에서 위 방향으로 살펴본다.)
코드는 모든 프로세스가 동일한 고정된 주소에서 시작된다.
그 다음으로 데이터 구역으로 C언어의 전역변수에 대응되는 영역이 존재한다.
모든 프로세스가 동일한 고정된 주소를 가지면, 충돌이 나지 않을까?
이를 방지해주는 것이
실제 메모리상의 주소는 다르다. 프로세스가 보는 주소와 실제 메모리상의 주소를,
malloc
, free
함수를 통해 조절한다. (9장 - virtual memory에서 다룬다.)
중간에는
단,
3장에서 자세히 다루게 된다.
이 곳에 있는 내용은
예를 들어, 물리적 주소와 가상의 주소간의 관계는 디스크에 저장되고,
모든 I/O 장치, 네트워크는 file 로 모델링 된다.
모든 Input, Output 은 단순히 파일을 읽고, 쓰는 것에 대응된다.
이 작고 우아한 개념은 매우 강력하다. 다양한 I/O 장치에 대해 통일된 시각을 제공해주기 때문이다.