CS/OS

1. 컴퓨터 시스템 개요

🥭맹2 2021. 3. 10. 23:32

 

heading이 안빠져서 캡처해서 올리기 .. ㅇ<-<

1. OS(운영체제)란?

컴퓨팅 자원들을 효율적으로 관리하여 사용자, 응용 프로그램에게 서비스를 제공하는 소프트웨어

OS란 무엇인가

2. 컴퓨터 하드웨어

  • 프로세서(Processor)

    연산을 위해 사용되는 장치

    • CPU

    • 그래픽카드 (GPU)

    • 응용 전용 처리장치(특별한 연산을 위해 사용되는 장치) 등

  • 메모리 (Memory)

    저장하는 장치

    • DRAM, DISK 등 ..

    • 주 기억장치

    • 보조 기억장치 등

  • 주변장치

    프로세서, 메모리를 제외한 장치들

    • 키보드/마우스 : 입력 장치

    • 모니터, 프린터 : 출력 장치

    • 네트워크 모뎀 등 : 네트워크 장치

3. 프로세서 (Processor)

  • 컴퓨터의 두뇌 (중앙처리장치)

    • 연산 수행

    • 컴퓨터의 모든 장치의 동작 제어

프로세서란 무엇인가

4. 레지스터 (Register)

**프로세서(CPU) 내부**에 있는 메모리

  • 프로세서가 사용할 데이터 저장

  • 컴퓨터에서 **가장 빠른 메모리**

1) 레지스터 종류

  • 용도에 따른 분류

    • 전용 레지스터(정해진 용도로 쓰이는 레지스터), 범용 레지스터(범용적으로 사용가능한 레지스터)

  • 사용자가 정보 변경 가능 여부에 따른 분류

    • 사용자 가시 레지스터(사용자가 정보를 볼 수 있고, 변경할 수 있는 레지스터), 사용자 불가시 레지스터(사용자가 정보를 볼 수 있고, 변경할 수 없는 레지스터)

  • 저장하는 정보의 종류에 따른 분류

    • 데이터 레지스터(데이터를 저장하는 레지스터), 주소 레지스터(주소를 저장하는 레지스터), 상태 레지스터(상태를 저장하는 레지스터)

사용자 가시 레지스터의 종류

// register.c 
#include <stdio.h> 
#include <stdlib.h> // malloc, free 함수가 선언된 헤더 파일 

int main() { 
	register int num1 = 10; // 변수 num1은 CPU의 레지스터를 사용 
    // register 안에 공간을 잡아달라고 부탁하는 것 (레지스터 안에 공간을 안잡아줄 수도 있음) 
	printf("%d\n", num1); 
}

 

사용자 불가시 레지스터 종류

  • 일반적으로 `전용 레지스터``사용자 불가시 레지스터`에 속함

  • 프로그램 카운터, 명령어 레지스터, 누산기의 설명은 알고 갑시다 !

  • 프로그램 카운터

    다음에 실행할 명령어의 주소를 보관하는 레지스터

    • 프로그램을 짰을 때, 우리가 다음에 실행할 명령어의 위치를 가지고 있는 것을 프로그램 카운터라고 함

    • 다음에 설명할 프로그램의 위치, or 다음에 실행할 명령어의 메모리 상의 주소

  • 명령어 레지스터

    지금 수행할 명령어를 보관하는 레지스터

    • PC를 통해 가져온 이 명령어(지금 수행할 명령어)가 보관되는 레지스터

  • 누산기

    우리가 계산하는 과정에서 어떤 값을 일시적으로 저장하는 레지스터

2) 프로세서의 동작

프로세서의 동작

5. 운영체제와 프로세서의 관계

  • 운영체제는 프로세서에게 처리할 작업을 할당 및 관리하는 역할

    • 프로세스(Process) 생성 및 관리

  • 운영체제는 프로그램의 프로세서 사용을 제어하는 역할

    • 프로그램의 프로세서 사용 시간 관리

    • 복수 프로그램간 사용 시간 조율 등

6. 메모리 (Memory)

  • 데이터를 저장하는 장치 (기억장치)

    • 프로그램(os, 사용자 sw 등), 사용자 데이터 등

  • 메모리의 종류

    1. 레지스터

      • 레지스터가 빠르고 좋은데 굳이 메모리의 계층을 나눠 사용하는 이유 ? 최소한의 비용으로 최고의 성능을 내기 위해 이러한 계층이 생긴 것

    2. 캐시 : CPU안에 있는 것 (레지스터에 비해 코어에서 멀리 떨어짐)

    3. 메인 메모리 : DRAM

    4. 보조기억장치 : HDD

    • 속도가 빨라지면 그만큼 가격이 비싸고 그만큼 용량을 작게 만듦

메모리의 종류

1) 메모리의 종류

**주기억장치 (Main memory)**

DRAM, DDR4 등 ..

  • 프로세서가 수행할 프로그램과 데이터 저장 (무조건)

    이유 : 프로세서가 직접 접근할 수 있는 영역은 **주기억장치**까지임. DISK까지 못감 -> 따라서 주기억장치에 프로세서가 수행할 프로그램을 넣고 써야함

    • DISK에서 Processor로 바로 접근해서 사용하면 되는데 굳이 Main memory를 거쳐서 사용하는 이유 ?

      • 하드웨어적인 관점에서 Disk의 속도는 천천히 빨라졌는데, CPU는 짱 빨라짐

        -> 이걸 해결하기 위해 disk보다는 용량(size)이 작지만 속도는 빠른 무언가를 놓아서 CPU가 일을 하는 동안 그 사이에 필요한 데이터를 이 곳에 미리 가져다 놓자 ! 이를 통해 CPU가 다음 작업을 할 때 이 메모리에서부터 가져옴으로써 이 사이에 큰 gap을 메꾸어주자 라는 전략에서 사용되는 것이 main memory.

        == disk까지 가는데 속도가 너무 느리니까 생기는 병목현상을 해결하기 위해 사용한 것이 main memory

         

         

         

         

        1960년은 컴퓨터 탄생 기준

       

  • ![image-20210310222605873](OS 1.assets/image-20210310222605873.png)
  • DRAM을 주로 사용

    • 프로세서가 직접 접근할 수 있는 메모리 중에서는 가장 용량이 크고, 가격이 가장 저렴

  • 디스크 입출력 병목현상(I/O bottleneck) 해소

프로세서와 디스크 사이에 메인메모리를 거치는 이유는 ! 두둥 왜 사진이 중간에 삽입이 안될까 ㅠ
그것은 바로 속도 차이 때문입니다요 병목현상을 해결하고자 CPU와 Disk사이에 main memory가 있는 것!

 

**캐시 (Cache)**

  • 프로세서(CPU) 내부에 있는 메모리 (L1, L2, L3 캐시 등)

    • 속도가 빠르고, 가격이 비쌈

  • 레지스터와의 차이 ?

    •  

      ![image-20210310223049468](OS 1.assets/image-20210310223049468.png)

       

       

      • 레지스터는 core에 훨씬 가까이 있어 더 빠른 녀석, cache들은 레지스터에 비해 core와는 조금 멀리 떨어져 있음

        , 멀리 떨어져있을수록 사이즈는 커지고 속도는 느려짐

     

요고슨 CPU 입니다 동그라미가 Cache를 뜻합니다 Core랑 가까운 순으로 L1, L2, L3 cache 입니다

  • 메인 메모리의 입출력 병목현상 해소

    • 메인 메모리를 사용함으로써 CPU와 저장장치 사이의 병목현상을 줄였음, but 그럼에도 불구하고 CPU와 main memory간의 성능차이가 컸음 -> 이를 해결하기 위해 메인메모리보다 빠르고 조금 작은 것을 사용하면 어떨까? 라는 생각에서 cache를 사용하게 됨 (현재는 cache도 3레벨로 나누어서 사용함, ex- L1 cache, L2 cache, L3 cache)

       

     

Cache 또한 CPU와 Main memory 사이의 성능 차이로 인한 병목 현상을 해결하기 위한 용도로 존재하는 것! CPU는 넘사인가

  • CPU의 스펙 보는 프로그램을 이용하면 간접적으로 내 컴퓨터의 캐시를 확인할 수 있음

    • 이 사진에서 L1 cache의 경우 128kB임

      • 겨우 이걸로 병목현상을 해결할 수 있을까 ? --> 캐시의 동작원리를 알아보러 가자 ㄱㄱ

CPU 스펙 예시 두둥 ! 여기서 볼 것은 빨간 박스 안에 있는 4x32KB ! 128KB라니 !!

캐시 - 캐시의 동작

 

캐시의 동작 원리 : 프로세서 <-> 캐시 <-> 메인메모리 는 요론 과정을 거칩니다

  • 일반적으로 HW적으로 관리 됨

  • 캐시 미스 (Cache miss)

    • 필요한 데이터 블록이 없는 경우

      1. 프로세서가 필요한 데이터가 있음. 2. 캐시에 필요한 데이터 블록이 있는지 확인 3. 캐시에 필요한 데이터가 없다면 캐시가 메인 메모리로 가서 필요한 데이터 블록을 가져옴 4. 캐시가 메인메모리로 가서 가져온 데이터 블록을 프로세서에게 전달

      -> 캐시가 없는 것보다 뭔가 비효율적인 느낌이 듦

      but 효과를 낼 수 있음 -> 이유 : 지역성(locality) !! 따라서 지역성 때문에 캐시가 크지 않더라도 (ex: 128kB) 캐시 미스가 일어날 확률 줄어듦

  • 캐시 히트(Cache hit)

    • 필요한 데이터 블록이 캐시 존재

      1. 프로세서가 필요한 데이터가 있음. 2. 캐시에 필요한 데이터 블록이 있는지 확인 3. 캐시에 필요한 데이터가 있다면 굳이 캐시가 메인 메모리로 가서 필요한 데이터 블록을 가져올 필요가 없음 (시간 절약) 4. 캐시가 필요한 데이터 블록을 프로세서에게 전달

3) 캐시 - 지역성(Locality)

  • 공간적 지역성 (Spatial locality)

    • 참조한 주소와 인접한 주소를 참조하는 특성

      • ex ) 순차적 프로그램 수행

     

     

     

     

  • 시간적 지역성 (Temporal locality)

    • 한 번 참조한 주소를 곧 다시 참조하는 특성

      • ex) For 문 등의 순환문

     

  • **지역성은 캐시 적중률(cache hit ratio)과 밀접**

    • 알고리즘 성능 향상 위한 중요한 요소 중 하나

공간적 지역성 ... 추후에 정리해서 업로드 하겠습니다
시간적 지역성 .. 이 친구 또한 추후에 정리해서 올리겠습니다

for (i=0; i<=n; i++) { 
	for (j=0; j<m; j++) { 
    	x = x + (a[i][j]); // A 
        	// OR 
        x = x + (a[j][i]); // B 
    } 
}

위의 코드에서 A와 B중 선택해야하는 것은 ? 두둥 ~! Cache block은 가로 형태이기 때문에 A가 좋습니다요

보조기억장치(Auxiliary memory / secondary memory / storage)

하드디스크, usb, cd/dvd, sd카드 등 ..

  • 프로그램과 데이터를 저장

  • 프로세서가 직접 접근할 수 없음 -> `주변장치`로 분류됨

    • 주기억장치를 거쳐서 접근

    • (프로그램/데이터 > 주기억장치)인 경우는 ?

      • 가상 메모리 (Virtual memory) : 하드디스크의 일부를 메모리처럼 사용하는 것 -> 메모리보다 더 큰 프로그램을 올려놓고 사용할 수 있음

  • 용량이 크고, 가격이 저렴

메모리와 운영체제

  • 메모리 할당 및 관리

    • 프로그램의 요청에 따른 메모리 할당 및 회수

    • 할당된 메모리 관리

  • 가상 메모리 관리

    • 가상 메모리 생성 및 관리

    • 논리주소 -> 물리주소 변환

시스템 버스 (System Bus)

**하드웨어들이 데이터 및 신호를 주고 받는 물리적인 통로**


시스템 버스

  • 각각의 장치들을 정류장으로 가지는 수단이라고 해서 버스라는 명칭이 주어진 것 !

버스의 종류

시스템 버스의 종류

  • 데이터버스

    • 데이터를 나르는 통로

  • 주소버스

    • 주소를 나르는 통로

  • 제어버스

    • 제어를 나르는 통로

시스템 버스의 동작 과정

주변장치

프로세서와 메모리를 제외한 하드웨어들

  • 입력장치 : 키보드, 마우스, 터치 인터페이스 등

  • 출력장치 : 모니터, 프린터, 스피커 등

  • 저장장치 : disk, usb, cd/dvd 등

주변장치와 운영체제

  • 장치드라이버 관리

    • 주변 장치 사용을 위한 인터페이스 제공 (vendor에서 장치 API를 제공해줌. OS는 API를 통해서 장치를 관리함 (장치 driver가 API임) )

  • 인터럽트 (Interrupt) 처리

    • 주변 장치의 요청 처리 (예를 들면, 키보드에서 뭔가 입력이 있는 것을 인터럽트라고 함, 키보드를 눌렀을 때 요청에 다른 무언가 해주는 것을 OS가 해줌)

  • 파일 및 디스크 관리

    • 파일 생성 및 삭제

    •  

      디스크 공간 관리 등