좋은 강의 영상을 찾아서.. 공부 고
OS란?
데이터를 효율적으로 관리하여 사용자, 응용프로그램들에게 서비스를 제공하는 역할을 한다.
즉, 컴퓨팅 자원들을 효율적으로 관리하여 이를 통해 사용자에게 서비스를 제공하는 역할
컴퓨터 시스템 개요
컴퓨터 하드웨어의 종류
- 프로세서 - 계산(연산)하는 역할
- CPU
- GPU
- 응용 전용 처리장치 (특별한 목적을 갖고 연산하는 것)
- 메모리 - 저장하는 역할
- 주 기억장치
- 보조 기억장치
- 주변 장치
- 키보드, 마우스
- 모니터, 프린터
- 네트워크 모뎀
프로세서란?
프로세서는 컴퓨터의 뇌이다. 그리고 이 뇌는 운영체제에 의해 관리된다.
중앙처리장치란 이름에서 나 겁나게 중요한 놈이야!!! 하고 분명하게 나와있다.
프로세서는 연산을 수행할 뿐만 아니라 컴퓨터의 모든 장치의 동작을 제어한다.
프로세서가 가진 컴포넌트들은 다음과 같다.
- 연산, 제어장치
- 레지스터
이중 레지스터란 프로세서 내부에 있는 메모리로, 프로세서가 사용할 데이터를 저장하는 역할을 한다.
레지스터의 특징은 프로세서 내부에 존재하는 것과, 컴퓨터가 사용하는 메모리 중 가장 빠르다는 것이다.
레지스터의 종류
- 가시 레지스터 (눈에 보이는 것)
- 데이터 레지스터 - 데이터를 저장하는 레지스터
- 주소 레지스터 - 주소를 저장하는 레지스터
- 불가시 레지스터(눈에 보이지 않는 것)
- 프로그램 카운터 - 다음 차례의 명령어의 주소를 보관하는 레지스터
- 명령어 레지스터 - 현재 실행하는 명령어를 보관하는 레지스터
- 누산기 - 계산하는 과정에서 데이터를 일시적으로 저장하는 레지스터
- 메모리 주소 레지스터
- 메모리 버퍼 레지스터
메모리란?
메모리란 데이터를 저장, 기억하는 장치를 의미한다.
메모리의 종류는 크게 4가지로 구분된다.
- 레지스터
- 캐시 - CPU 내부에 있는 메모리
- 주 기억장치 - DRAM
- 보조 기억장치 - HDD, SSD
주기억장치
흔히 말하는 메모리는 주기억장치를 의미한다. (소켓에 꽂혀있는 램)
프로세서가 직접 접근할 수 있는 메모리 중 용량이 가장 크고, 가격이 제일 저렴하다.
프로세서가 수행할 프로그램과 데이터가 반드시 저장되야한다.
위 사진에서 알 수 있듯 프로세서가 직접 접근할 수 있는 영역은 주기억장치까지이다.
실제 실행 흐름은 위와 같다.
근데..보조기억 장치에 저장된 데이터를 사용할 때 왜 주기억장치에 옮겨서 실행을 하는 의문이 들 것이다.
그냥 꺼내오면 되지;; 왜 주기억장치를 거침??
이는 하드웨어적 관점에서 살펴볼 수 있는데 보조기억장치의 발전속도와 CPU의 발전속도 차이로 인해 생겨난 과정이다.
CPU의 발전이 엄청난 속도로 이뤄져 보조기억장치의 발전 속도와 큰 차이가 발생했고 이로 인해 CPU와 보조기억장치의 속도 차이가 많이나 병목이 발생하게 되었다.
이를 해결하기 위해서 용량은 작지만 속도는 빠른 주기억장치(메인 메모리)를 위치시켜 CPU가 일을 하는 동안 보조기억장치에 위치한 데이터를 주기억장치로 이동시켜 미리 대기시켜놓는 방법을 통해 퍼포먼스를 더욱 높일 수 있게되었다.
거리를 기준으로 본다면 CPU가 보조기억장치까지 가서 데이터를 꺼내오기엔 거리가 너무 멀었는데, 중간에 쿠팡허브같은 저장소를 둬서 미리 데이터들을 쿠팡허브(저장소)에 위치시키고 CPU는 저 멀리까지 갈 필요 없이 더 가까운 쿠팡허브(저장소)에서 꺼내올 수 있게 되어 성능이 향상된 것이다.
캐시
캐시는 프로세서 내외부에 위치하고 있으며, 캐시의 역할 또한 앞서 말한 메인 메모리(주기억장치)가 행했던 속도 차이 보완의 역할을 하는 고속 버퍼이다.
메인 메모리(주기억장치)가 보조 기억장치와 CPU의 속도차이를 해소해주었지만, 아직도 차이가 많이나서 같은 방식으로 메인 메모리의 속도와 CPU의 속도를 보완해주기 위해 중간에 메인 메모리보다 빠르고 용량은 적은 메모리를 위치시켜 속도를 보완해준 것이다. (메인 메모리 입출력 병목현상 해소)
캐시의 동작
캐시는 일반적으로 CPU가 알아서 관리한다
하지만 알아야할 것들이 있는데.. 캐시 히트/ 미스를 보자..
- 캐시 히트
- 필요한 데이터 블록이 캐시에 존재함
- 캐시 미스
- 필요한 데이터 블록이 캐시에 존재하지 않음
이는 우리가 흔히 알고 있는 캐시 지우기 이런 것들.. 의 과정과 비슷하다?????? 라고 보면되려나
여튼 우리가 웹서핑을 할 때 많이 들어가는 웹페이지의 사진, 데이터들을 캐싱해놓고 다음에 또 들릴 땐 해당 데이터를 다운받는 비용을 소모치 않게 해주는데.. 좀 다른가..
동작 과정을 설명해보면 다음과 같다.
캐시 미스
캐시 미스는 CPU가 필요로하는 데이터가 캐시에 없는 경우를 캐시 미스라고 하며 이 땐 주기억장치까지 가서 데이터를 가져와야하므로 추가적인 비용이 소모된다.
캐시 미스가 발생했을 때 주기억 장치로부터 가져온 데이터는 캐시에 저장되고, 만일 CPU에게 이전에 가져온 데이터(캐시에 저장되어있는 데이터)가 필요할 경우 추가적인 비용 소모없이 캐시에서 필요한 데이터를 사용할 수 있게된다.
이를 캐시히트라고 한다.
캐시 히트
그림처럼 CPU는 굳이 주기억장치까지의 먼 길을 나서 데이터를 구할 필요없이 가까운 캐시에서 데이터를 구하면 되므로 비용을 아낄 수 있게된다.
캐시 미스가 발생하여 데이터를 캐시로 가져올 땐 특정 데이터만 가져오는 것이 아닌 주변 데이터들도 갖고와 캐시를 채우는데, 이 주변 데이터들까지의 묶음을 캐시 블록(라인)이라고 한다.
캐시 블록과 프로그래밍 효율성은 연관이 있는데.. 이는 지역성으로 설명할 수 있다.
지역성
공간적 지역성
- 참조한 주소와 인접한 주소를 참조하는 특성
특정 주소를 참조한 후, 참조한 주소 주변의 주소도 참조할 확률이 높다는 것을 의미한다.
공부한 영상에서는 코드로 예시를 들고있는데, 1번째 줄 코드가 진행된 다음엔 1번째 줄의 주변인 2번째, 3번째 줄이 실행될 확률이 높은 것으로 예를 들었다.
시간적 지역성
- 참조한 주소를 다시 참조하는 특성
반복문을 예로 들 수 있다. 한 번 돈 것은 다시 돌 확률이 높다는 것임
이러한 지역성은 캐시 히트와 연관이 깊다.
반복문을 예로 들어보자
for i in 0..<3 {
for j in 0..<3 {
print(array[i][j])
}
}
for i in 0..<3 {
for j in 0..<3 {
print(array[j][i])
}
}
1. 첫번째 반복문의 경우
처음 반복문을 돌 때는 당연히 캐시에 저장되어 있지 않기때문에 캐시 미스가 발생한다.
캐시 미스가 발생했으니 다음 루프가 실행될 땐 캐시에 array[0][0] 뿐만 아니라 공간 지역성의 특성으로 인해 array[0][0~3]의 캐시 블록이 저장이 되어있을 것이다.
이로 인해 루프가 한번 더 돌며 array[0][1]을 꺼내올 땐 캐시에 array[0][0~3]이 저장되어 있기 때문에 캐시 히트가 발생하게 되고, 주기억장치까지 갈 필요가 없어져 더 좋은 성능을 낼 수 있게 된다.
2. 두번째 반복문의 경우
이 또한 처음 반복문을 돌때는 캐시에 저장된 것이 없으므로 캐시 미스가 발생한다.
여기서도 공간 지역성의 특성으로 인해 array[0][0~3]의 캐시 블록이 저장되는데.. 여기서 문제가 생긴다.
해당 반복문에서는 다음 루트에 찾는 데이터가 array[1][0]이므로 캐시 블록엔 해당 데이터가 없고, 캐시 미스가 발생하며 다시 주기억장치까지 접근해야하는 비용이 생겨나는 것이다.
이러한 이유로로 인해 지역성의 특성이 캐시 히트와 많은 연관이 있다고 한다.
그리고 캐시 미스를 줄이면 줄일수록 주기억장치까지 갔다와야하는 비용을 줄일 수 있으므로 효율성은 극대화될 것이다.
보조기억장치
보조기억장치는 프로그램과 데이터들 저장하고, 프로세스는 이 곳에 직접 접근할 수 없다.
여기서 생각해봐야될 것은 위에서 설명한 과정에서 나오는 의문점인데, 보조기억장치에서 주기억장치(메인 메모리)에 데이터를 미리 옮겨놓고 CPU는 주기억장치에 접근하여 데이터를 사용하는데, 만일 데이터나 프로그램의 크기가 주기억장치의 크기보다 크다면 도대체 어떻게 옮기는 것일까?
이 때는 가상메모리를 활용하여 주기억장치보다 크기가 큰 프로그램이나 데이터를 저장할 수 있게 된다.
가상 메모리는 다음에 알아보자.
시스템 버스
시스템 버스란 하드웨어가 데이터 및 신호를 주고 받는 물리적인 통로를 의미한다.
시스템 버스의 대표적인 종류 3가지가 있다.
- 데이터 버스: 프로세스와 메인 메모리(주기억장치), 주변장치 사이에서 데이터를 전송하는 통로
- 주소 버스: 프로세스가 시스템의 구성 요소를 식별하는 주소 정보를 전송하는 통로
- 제어 버스: 프로세서가 시스템의 구성 요소를 제어하는데 사용하는 통로
주변 장치
주변 장치란 프로세서와 메모리를 제외한 하드웨어들을 의미한다.
키보드, 마우스, 모니터, 스피커, USB 등을 의미하며 입력장치, 출력장치, 저장장치로 구분된다.
그 밖에 운영체제가 하는 일
- 장치 드라이버 관리 - 주변 장치 사용을 위한 인터페이스 제공
- 음향기기 드라이버 설치.. 뭐 리얼텍 이런것들
- 인터럽트 처리 - 주변 장치의 요청(신호) 처리 (키보드, 마우스 입력 등)
- 파일 및 디스크 관리 - 파일 생성 및 삭제, 디스크 공간 관리 등
투표했당 크크
출처: https://www.youtube.com/watch?v=EdTtGv9w2sA&list=PLBrGAFAIyf5rby7QylRc6JxU5lzQ9c4tN&index=1&t=291s
'CS > OS' 카테고리의 다른 글
[OS] OS OverView (0) | 2022.03.13 |
---|---|
[OS] OS의 작업 수행 방식 (0) | 2022.03.13 |
댓글