운영체제란 컴퓨터 자원인 하드웨어를 관리해서 사용자에게 서비스를 제공하는 소프트웨어를 말한다.
컴퓨터의 두뇌인 중앙처리장치다. 이는 연산을 수행하고 컴퓨터의 모든 장치의 동작을 제어한다.
레지스터란 프로세서 내부에 있는 메모리다. 프로세서가 사용할 데이터를 저장하는 컴퓨터에서 가장 빠른 메모리다.
레지스터의 종류
운영체제는 프로세스에게 처리할 작업을 할당하고 관리한다.
또한 프로그램의 프로세서 사용을 제어하고 사용 시간을 관리하고 복수의 프로그램간 사용시간을 조율해준다.
메모리란 데이터를 저장하는 장치다. 기억장치라고도 한다.
프로그램, 사용자 데이터등을 저장한다.
메모리의 종류
1) 주 기억장치
컴퓨터에 메인보드에 붙여있는 장치다. DRAM이라고도 한다.
프로세서가 수행할 프로그램과 데이터를 저장한다.
디스크 입출력 병목현상을 해소한다.
CPU는 빠른데 Disk 속도는 느려서 병목 현상이 일어나서 사이즈는 작지만 속도는 빠른 메인 메모리를 사용해서 병목 현상을 해소시킨다.
2) 캐시
프로세서 내부에 있는 메모리다. 속도가 빠르고 가격이 비싸다.
메인 메모리의 입출력 병목 현상을 해소한다.
메인 메모리보다도 속도가 빠른 캐시를 사용해서 메인 메모리 입출력 병목 현상을 해소시킨다.
캐시의 동작 -> 일반적으로 하드웨어적(CPU가)으로 관리된다.
먼저 캐시에게 가서 정보가 있는지 물어보고 없다면 메인 메모리에서 캐시가 정보를 가져와 프로세서에게 정보를 주게 된다. 이러한 상황을 캐시 미스라고 하고 만약 정보가 캐시에게 있었다면 캐시 히트라고 한다. 이는 필요한 데이터 블록이 캐시에 존재하는 상황이다.
그런데 캐시는 128kb밖에 안되는데 큰 효과를 가져올 수 있는 이유가 뭘까?
그것은 바로 지역성 덕분이다.
지역성으로 인해 캐시 적중률과 밀접하다. 알고리즘 성능 향승을 위한 중요한 요소 중 하나이다.
for (let i = 0; i <= n ; i++) {
for (let j = 0; j< m; j++) {
x = x + (a[i][j]); // A
or
x = x + (a[j][i]); // B
}
}
B의 경우를 살펴보자.
캐시 라인이 16 블록이라고 하면 처음에는 a[0][0]을 가져오는데 이는 a[0][0~15]를 가져오게 된다. 하지만 B의 경우에는 j가 먼저 올라가므로 다음 처리해야 할 것이 a[1][0]이 된다. 이 경우는 다시 캐시 미스가 발생하여 시간이 오래걸린다.
하지만 A의 경우는 어떨까?
처음에는 B와 같이 a[0][0]을 가져와서 캐시 미스를 내며 a[0][0~15]를 가져온다. 하지만 다음 경우에는 a[0][1]을 가져와야하는데 이는 이미 캐시에 있는 정보라서 캐시 히트 상황이다. 이처럼 빠르게 처리할 수 있다.
둘 중에서는 A가 좋은 효율을 보인다.
3) 보조 기억 장치
하드 디스크, usb 등이 있다. 프로그램과 데이터를 저장한다. 프로세서가 직접 접근할 수는 없어서 주변 장치로 인식한다. 용량이 크고 가격이 저렴하다. 그런데 만약 프로그램이 주기억장치보다 용량이 큰 경우는 어떻게 할까?
게임이 20GB고 주 기억장치인 램이 8GB이면 어떻게 할까? 이럴 때를 위해 가상메모리를 사용한다.
가상메모리란 보조 기억 장치의 일부를 사용한다. 이는 후에 배울 예정이다.
하드웨어들이 데이터 및 신호를 주고 받는 물리적인 통로를 말한다.
프로세서와 메모리를 제외한 하드웨어들을 말한다.
입력장치, 출력장치, 저장장치로 나눈다.
키보드, 마우스, 모니터, 스피커, 하드디스크, USB 등이 있다.