컴퓨터 시스템으로의 여행
시스템이란? 프로세서란? 컨텍스트란? 쓰레드란? 레지스터란? 이해가 먼저다. 암기는 이후
1.1 정보는 비트와 컨텍스트로 이루어진다.
context (컨텍스트) : 어떠한 행위를 할 때 필요한 정보
1 byte = 8 bit
참조 참조2
1.5 캐시가 중요하다
캐시의 주요 목적은 복사 과정들을 가능한 한 빠르게 동작하도록 하는 것이다.
- 프로세서가 단기간에 필요로 할 가능성이 높은 정보를 임시로 저장할 목적으로 사용한다. (프로세서-메모리 간 속도 읽는 속도 격차에 대응하기 위해 사용한다.)
- 프로세서에서 데이터 읽는 속도 : 용량이 더 큰 저장장치 > 작은 저장장치
(디스크 >>> 메모리 >> 레지스터)
- 기계어 인스트럭션들은 본래 하드디스크에 저장되어 있었다.
- 프로그램이 로딩될 때 : 하드 디스크 -> 메인 메모리
- 프로그램이 실행될 때 : 메인 메모리 -> 프로세서
캐시 메모리를 이해하는 응용 프로그래머는 자신의 프로그램 성능을 10배 이상 개선시킬 수 있다.
1.6 저장장치들은 계층구조를 이룬다.
- 레지스터 파일은 L0, 캐시는 L1 ~ L3, 메인 메모리(DRAM)은 L4
- 한 레벨의 저장장치가 다음 하위레벨 저장장치의 캐시 역할을 한다는 것이다.
- L3는 메인 메모리의 캐시이고, 디스크의 캐시 역할을 한다.
1.7 운영체제는 하드웨어를 관리한다.
- 프로그램이 직접 엑세스하지 않고, 운영체제 (OS) 서비스를 활용한다.
- 프로그램이 하드웨어를 제어하려면 언제나 운영체제를 통해서 해야 한다.
- 운영체제의 두 가지 주요 목적
- 제멋대로 동작하는 응용프로그램들이 하드웨어를 잘못 사용하는 것을 막기 위해
- 응용프로그램들이 단순하고 균일한 메커니즘을 사용하여 복잡하고 매우 다른 저수준 하드웨어 장치들을 조작할 수 있도록 하기 위해
그림 1.10 하드웨어와 소프트웨어 사이에 OS가 존재한다.
그림 1.11을 통해 OS의 두 가지 목적 달성을 추상화 하여 표현한다.
⭐️ 1.7.1 프로세스
- hello 같은 프로그램이 실행될 때 운영체제는
- 시스템에서 이 한 개의 프로그램만 실행되는 것 같은 착각에 빠지도록 해준다.
- 프로그램이 프로세서, 메인 메모리, 입출력장치를 모두 독차지 하고 있는 것처럼 보인다.
- 프로세서는 프로그램 내의 인스트럭션들을 다른 방해 없이 순차적으로 실행하는 것처럼 보인다.
- 프로그램의 코드와 데이터가 시스템 메모리의 유일한 객체인 것처럼 보인다.
프로세스에 의해서 이렇게 만들어진다
- 프로세스는 실행 중인 프로그램에 대한 운영체제의 추상화이다.
- (추상화는 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것을 말한다.)
- concurrently (동시성) : 한 프로세스의 인스트럭션들이 다른 프로세스의 인스트럭션들과 섞인다는 것을 의미한다. (멀티코어 프로세서로 인해 한 개의 CPU가 다수의 프로세스를 동시에 실행하는 것처럼 보이게 해준다.)
- context switching (문맥 전환)
- system call (시스템 콜) : 쉘 -> OS로 제어권 양도, OS는 쉘의 컨텍스트를 저장하고 새로운 프로세스와 컨텍스트를 생성한 뒤, 새 프로세스가 종료되면 쉘 프로세스의 컨텍스트를 복구시키고 제어권을 넘겨주면서 다음 명령 줄을 기다린다.
kernel
- 하나의 프로세스에서 다른 프로세스로의 전환을 관리한다.
- OS 코드의 일부분으로 메모리에 상주한다.
- 커널은 별도의 프로세스가 아니다.
- 커널은 모든 프로세스를 관리하기 위해 시스템이 이용하는 코드와 자료구조의 집합이다.
⭐️ 1.7.2 쓰레드 (Thread)
- 프로세스는 실제로 쓰레드라고 하는 다수의 실행 유닛으로 구성되어 있다.