[OS] 1. Computer System Overview 1
💻CS/OS

[OS] 1. Computer System Overview 1

728x90
반응형

운영체제란?

운영체제란 무엇일까? 사전적 의미를 찾아보면 다음과 같다.

 

운영 체제 또는 오퍼레이팅 시스템은 시스템 하드웨어를 관리할 뿐 아니라 응용 소프트웨어를 실행하기 위하여 하드웨어 추상화
플랫폼과 공통 시스템 서비스를 제공하는 시스템 소프트웨어이다.

 

운영체제의 주된 목적으로는 하드웨어를 효율적으로 관리하는 것이다. 여러 하드웨어를 잘 관리하여 효율적으로 운영하여야 컴퓨터 성능이 좋아지기 때문에 효율적인 관리가 중요하다. 또한 이를 효율적으로 관리함으로 인해 사용자 혹은 응용 프로그램에게 편의를 제공할 수 있다. 

 

즉 주된 목적인 하드웨어를 관리하는 것이 중요하기에, 하드웨어에는 어떤 것들이 있는지 먼저 살펴보자. 

 

하드웨어 

컴퓨터 하드웨어는 프로세서, 메모리(기억장치), 주변 장치로 구성되고 이들은 시스템 버스로 연결한다!

1. 프로세서

프로세서는 계산(연산)하는 역할을 주로 수행하며 컴퓨터 내 모든 장치의 동작을 제어한다.

이 프로세서는 연산장치와 제어장치, 레지스터로 구성되며 이들은 내부 시스템 버스로 연결한다. 

 

  • CPU (연산장치)
    • 컴퓨터 시스템을 통제하고 프로그램의 연산을 실행하고 철리하는 가장 핵심적인 컴퓨터의 제어 장치
  • GPU (연산장치)
    • 그래픽 연산을 빠르게 처리하여 결과값을 모니터에 출력하는 연산 장치
  • 레지스터
    • 레지스터는 프로세서 내부에 있는 메모리를 의미한다. 레지스터는 프로세서가 사용할 데이터를 저장하는 컴퓨터에서 가장 빠른 메모리이다. 하지만 처리 속도는 빠를지라도, 용량은 적고, 비용이 비싸 많이 활용하기 어려운 자원으로 꼽힌다. 

 

2. 메모리

메모리는 데이터를 저장하는 장치이다. 메모리는 컴퓨터 성능과 밀접한 관계를 가지기에 크고 빠르며 비용이 저렴한 메모리를 요구하게 된다. 하지만 앞서 말했던 것 처럼 속도가 빠른 메모리(레지스터 등)은 가격이 비싸고, 용량이 작다는 단점이 있고, 반대로 보조기억 장치와 같은 것들은 가격은 저렴하고, 용량도 크지만 속도가 느리다. 이런 정보들을 가지고 메모리 계층 구조를 구성하여 비용, 속도, 용량을 서로 상호호 보완한다. 

 

메모리 계층 구조

 

레지스터,캐시,메인 메모리는 프로세서가 프로그램과 데이터에 직접 접근 가능하지만, 보조기억장치는 프로그램과 데이터를 메인 메모리에 옮겨야 씰행할 수 있다.

 

2-1. 메인 메모리

 

주기억장치인 메인 메모리는 프로세서가 수행할 프로그램과 데이터를 저장하는 역할을 한다. 용량이 크고 가격이 저렴하다는 특징을 가져 cpu와 disk 사이의 병목(I/O Bottleneck)을 해소해주는 역할을 하기도 한다!

 

 

cpu는 점점 발전함에 따라 속도가 빨라지는데 disk가 그 속도 차이를 메꾸기 어려워지게 되면서 많은 병목이 발생했었다. 속도를 따라가지 못하니 일 처리 능력이 떨어지게 되면서 이를 해소하기 위해 중간에 메인 메모리를 두게 되었고, 이 덕분에 성능을 조금 더 빠르게 할 수 있었다.

 

2-2. 캐시

캐시는 프로세서 내부나 외부에 있으며 처리 속도가 빠른 프로세서와 상대적으로 느린 메인 메모리의 속도 차이를 보완하는 고속 버퍼이다. 

앞서 메인 메모리가 프로세서와 디스크 간의 속도 차이를 해소해준다라고 이야기 했었는데, 이 또한 부족하여 캐시가 메인 메모리 입출력 병목현상을 해소하게 된 것이다. 

 

 

여기서 중요한 개념이 캐시 히트/캐시 미스이다.

 

  • 캐시 히트 : 필요한 데이터 블록이 캐시에 존재하는 경우
  • 캐시 미스 : 필요한 데이터 블록이 없는 경우 

예를 들어서 프로세서가 A라는 데이터가 있니 라고 물었을 때, 캐시에 A라는 데이터가 없다면 이를 캐시 미스라고 하며, 캐시는 메인 메모리에 가서 A를 캐시 안으로 가지고 들어온다. 그리고나서 A를 프로세서에게 전달하게 된다. 

 

[캐시 미스] 프로세서 > 캐시 > 메인 메모리 > 캐시 > 프로세서

 

일전의 과정으로 이제 A는 캐시에 올라와 있게 된다. 만약 그 다음에 또 A를 필요로 한는 경우가 온다면 A는 이미 캐시에 존재하기에 굳이 메인 메모리에 가지 않고도 A를 얻을 수 있다. 이런 경우를 캐시 히트라고 한다. 굳이 메인 메모리까지 가는 시간을 들이지 않고 필요한 데이터를 가져다 쓸 수 있는 것이다. 

 

[캐시 히트] 프로세서 > 캐시 > 프로세서

 

사실 캐시 미스가 발생했을 때, 메인 메모리에 가서 A만 가져오지는 않고 그 주변의 데이터들도 캐시로 함께 가져오게 되는데 이 크기를 정하는 것을 캐시 블록(라인)이라고 한다. 캐시 블록과 실제 프로그래밍 코드를 효율적으로 짜는 것은 깊이 연관이 있는데 다음 경우를 보면 이해가 쉬울 것이다.

 

예를 들어서 이중 for문으로 각 요소들에 접근하는 경우를 생각해보자. 두 가지 경우가 있을 것이다. 

 

// arr는 5x5 배열

// 1번
for i in 0..<5 {
    for j in 0..<5 {
        print(arr[i][j])
    }
}

// 2번 
for i in 0..<5 {
    for j in 0..<5 {
        print(arr[j][i])
    }
}

사실 진행 방향에 차이만 있다고 느낄 수 있지만 이는 지역성이라는 개념과 큰 연관이 있다.

 

지역성

지역성은 두 가지 종류가 있다.

  • 공간적 지역성
    • 참조한 주소와 인접한 주소를 참조하는 특성 

 즉, 주소를 한 번 참조하면 그 다음에 그 주변 주소를 찾을 확률이 높다는 것을 의미한다. 예를 들어 코드를 짰을 때, 1번 라인이 실행된 다면 그 다음에 주변인 2번 라인이 실행될 가능성이 높다는 것과 같다.

 

  • 시간적 지역성 
    • 참조한 주소를 곧 다시 참조하는 특성

예를 들어 for문의 경우 총 2번 반복한다고 하면 1번째 이후 2번째에 다시 참조할 가능성이 높다는 것. 빙글빙글 반복되는 경우에 시간적 지역성이 해당된다. 

 

아무튼 이 지역성이 무슨 연관이 있을까? 

앞서 말했던 것 처럼 캐시는 블록 사이즈에 따라 얼만큼의 데이터를 메인 메모리에서 캐시로 가져올지를 정하게 된다. 

예를 들어 캐시 블록이 5인 경우라고 생각해보고 위에 작성한 코드의 진행 방식을 보면 다음과 같다. 

 

[1번 경우]

처음에만 캐시 미스가 발생하고, 그 다음부터는 공간적 지역성 덕분에 캐시 히트의 장점을 누릴 수 있다. 행이 바뀔 때만 캐시 미스가 발생하게 되며 나머지 경우는 모두 캐시 히트하여 효율적으로 운영할 수 있다.

 

[2번 경우] 

 

[j][i]로 인덱싱하는 경우 캐시 미스가 많이 나게 된다. 결론적으로 캐시 히트가 많은 1번 경우가 더 메모리 효율적인 것이다. 

그래서 지역성캐시 적중률과 밀접하다는 것이다. 그리고 주변 것들을 읽는데 캐시가 효과적이라는 것이다!

 

2.3 보조기억장치 

 보조기억장치는 프로그램과 데이터를 저장한다. 또한 보조기억장치에는 프로세서가 직접 접근할 수 없고 주기억장치를 거쳐서 접근해야한다. 그리고 용량이 크고 가격이 저렴한 편이다. 

 

+ 프로그램/데이터가 주기억장치보다 클 때는 가상메모리를 활용하면 커버할 수 있다. (메모리보다 더 큰 프로그램이 사용 가능해진다)

 

 

3. 시스템 버스 (버스 = 나르는  통로)

시스템 버스는 하드웨어들이 데이터 및 신호를 주고 받는 물리적인 통로를 의미한다. 

  • 데이터 버스 : 프로세서와 메인 메모리, 주변장치 사이에서 데이터를 전송
  • 주소 버스 : 프로세서가 시스템의 구성 요소를 식별하는 주소 정보를 전송
  • 제어 버스 : 프로세서가 시스템의 구성요소를 제어하는데 사용 

 

4. 주변장치

주변장치는 프로세서와 메인 메모리를 제외한 나머지 하드웨어 구성 요소이다. 크게 입력장치, 출력장치, 저장장치로 구분된다.

(ex. 키보드/마우스/모니터 등등)

 

출처 :

https://www.youtube.com/watch?v=EdTtGv9w2sA&list=PLBrGAFAIyf5rby7QylRc6JxU5lzQ9c4tN&index=1 

 

728x90
반응형