일반적인 시스템의 디스크 드라이버는 메인 메모리보다 1000배 크기가 크지만, 프로세서가 1워드의 데이터를 읽어들이는데 걸리는 시간은 메모리에서보다 천만배 더 오래걸릴 수 있다.
ex) L1과 L2의 캐시는 각각 L2와 L3의 캐시, L3는 메인 메모리 캐시
쉘 프로그램이 hello 프로그램을 로드하고 실행했을 때와 hello 프로그램이 메세지를 출력할 때, 프로그램은 운영체제가 제공하는 서비스를 활용
응용 프로그램이 하드웨어를 제어하려면 언제나 운영체제를 통해서 해야한다.
응용 프로그램의 목적:
1. 응용 프로그램들이 하드웨어를 잘못 사용하는 것을 막는다.
2. 응용 프로그램들이 단순하고 균일한 매커니즘을 사용하여 복잡하고 매우 다른 저수준 하드웨어 장치들을 조작하도록 하기 위함
파일은 입출력장치의 추상화 / 가상메모리는 메인 메모리와 디스크 입출력 장치의 추상화 / 프로세스는 프로세서, 메인 메모리, 입출력 장치 모두의 추상화이다.
프로세스
프로세스는 실행중인 프로그램에 대한 운영체제의 추상화이다.
다수의 프로세스들은 동일한 시스템에서 동시에 실행.
동시성은 한 프로세스의 인스트럭션들이 다른 프로세스의 인스트럭션과 섞인다는 것.
운영체제는 문맥 전환(context switching)이라는 방법을 사용하여 교차 실행을 수행한다.
문맥전환(context switching): 현재 프로세스의 컨텍스트를 저장하고 새 프로세스의 컨텍스트를 복원 시키는 것
하나의 프로세스에서 다른 프로세스의 전환을 운영체제 커널에 의해 관리된다.
커널은 운영체제 코드의 일부분으로 메모리에 상주한다. 별도의 프로세스가 아니다!
쓰레드
시스템에서 프로세스가 실제로 쓰레드라고 하는 다수의 실행 유닛으로 구성되있다.
해당 프로세스의 컨텍스트에서 수행되며 다수의 프로세스들에서보다 데이터 공유가 더 쉽고, 프로세스보다 더 효율적이다.
가상 메모리
각 프로세스들이 메인 메모리 전체를 독점적으로 사용하고 있는 것 같은 착각을 제공하는 추상화이다.
주소 공간의 최상위 영역은 모든 프로세스들이 공통적으로 사용하는 운영체제의 코드와 데이터를 위한 공간이다.
주소 공간의 하위 영역은 사용자 프로세스의 코드와 데이터를 저장한다.
영역 종류:
프로그램 코드와 데이터
힙
공유 라이브러리
스택
커널 가상 메모리
파일
연속된 바이트들이며, 응용 프로그램의 시스템에 들어있는 다양한 입출력 장치들에게 통일된 관점을 제공하는 역할을 한다.
Amdahl의 법칙
동시성과 병렬성
먼저 쓰레드와 프로세스의 차이점부터 확실히 알고 가자.
쓰레드를 이용하면 한 개의 프로세스 내에서 실행되는 다수의 제어흐름을 가질 수 있다.
여러 명이 한 개의 웹 서버로부터 페이지를 사용하고자 할 때, 동시에 교신할 수 있도록 한다.
대부분의 실질적인 계산은 한 개의 프로세서에 의해 이루어지는 걸 단일 프로세서 시스템이라 한다.
여러개의 프로세서를 가지고 하나의 운영체제 커널의 제어하에 동작하는 것을 멀티 프로세서 시스템이라한다.
멀티 프로세싱 이용으로 시스템 성능 개선 방법이 두가지 있다.
1. 다수의 태스크를 실행할 때 동시성을 시뮬레이션할 필요를 줄여준다.
2. 프로그램이 병렬로 효율적으로 실행할 수 있는 멀티 쓰레드 형태로 표현될 때 개선된다.
컴퓨터 시스템에서 추상화의 중요성
ex) 다른 언어로 예를 들면 자바의 경우 클래스 선언, C에서는 함수 프로토타입