Non-Uniform Memory Access System
- HW - 눈에 보이는 여러가지 장치(CPU - 중앙 처리 장치, 메모리, 입출력 장치 - I/O)로 구성되어 기본 계산용 자원을 제공
- 운영체제 - 다양한 사용자를 위해 다양한 응용 프로그램간의 하드웨어 사용을 제어하고 조정(자원 할당자)
- 응용프로그램 - 컴파일러, 데이터베이스, 오피스 등의 비즈니스 프로그램
- 유저 - 사용하는 사람, 기계, 또 다른 컴퓨터
- + 위 네가지를 사용하기 위해 우리는 네트워크를 이용
- 컴퓨터 시스템 구성 요소에 대한 개략적 구성도

- 하드웨어 - 운영체제 - 어플리케이션 프로그램 순으로 연결되어 우리가 쓰는 어플리케이션들은 하드웨어를 직접 제어하지는 않는다.
- 운영체제는 모든 것들의 사이에 존재하고 하드웨어를 제어하고 결과를 돌려주는 역할을 한다.
- 컴퓨터 사용자와 컴퓨터 하드웨어 사이에서 매개체 역할을 하는 프로그램이다.
- 사용자에게 프로그램을 수행할 수 있는 환경을 제공한다.
- 컴퓨터 하드웨어를 효율적으로 이용할 수 있도록 해준다.
- 중, 대형 컴퓨터에서는 동시에 많은 사람들이 사용할 수 있으니 이러한 환경에서도 잘 돌아가야한다.
- 핸드폰과 같은 환경은 일반 컴퓨터와 전혀다른 환경
- 임베디드 시스템은 운영체제가 없을 수도 있지만 전용의 아주 작은 운영체제가 있을 수도 있다.
- 아예 동작은 있지만 인터페이스가 없는 환경도 있다.
- 자원 할당자로서의 역할 - 하드웨어, 소프트웨어적인 자원들을 조정, 할당
- 제어 프로그램 - 사용자 프로그램의 실행과 I/O장치의 작동
- Kernel - 운영체제에서 소프트웨어적인 기능, 항상 수행하는 프로그램, 응용 프로그램을 제외한 모든 프로그램

- 버스로 연결되어 있음
- 이러한 각각의 요소들을 운영체제가 다루고 제어한다는 것
- 입출력 장치와 CPU는 동시에 동작
- 각 device controller는 제어를 담당 - device만을 위한 버퍼 메모리를 가지고 있음, 이는 device driver라는 운영체제에 의해 관리됨
- CPU는 메인메모리의 값과 컨트롤러의 local메모리의 값을 서로 주고 받을 수 있음
- device controller는 CPU와 데이터 전송을 interrupt로 주고 받는다.(제어를 주고 받음)
- 제어를 주고 받음 - 한쪽 끝은 CPU, 다른 한쪽은 I/O장치
- interrupt vector라는 것을 통해 interrupt service routine이라는 작은 프로그램이 동작할 수 있게 해줌 - 하던 일을 잠깐 중단
- 내부적으로 문제가 발생해 SW적으로 인터럽트를 발생시킨 것을 trap 혹은 exception 이라고 한다.
- 출력을 수행하고 있는 단일 프로세스에 대한 인터럽트 시간 일정

- 인터럽트의 타이밍을 나타낸 것
- I/O 관점 - 기다리고 있다가 입/출력이 생기면 데이터를 전송하는 것을 반복, 전송이 끝나면 인터럽트를 발생
- CPU 관점 - 일반 프로그램을 동작시키다가 I/O 장치의 인터럽트가 발생하면 잠깐 멈춰줌(신호를 보내줌), 다시 신호를 받으면 재시작
- 입/출력 장치가 인터럽트 신호를 보내면 CPU는 잠깐 멈춰서 인터럽트를 수행할 수 있도록 해줌
- 인터럽트가 발생하면 현재의 상태(레지스터 값, 프로그램 카운터 값)를 저장해야 함 - CPU가 어떤 일을 하고 있었는지 기억
- 인터럽트를 처리(다른 함수를 호출하는 것과 비슷)하고 나면 저장했던 정보를 찾아서 CPU가 하던 일로 돌아와서 다시 시작
- 어떤 인터럽트가 발생했는지 알아내기 위해서 polling 방식(어떤 것인지 살펴보는 것)이나 vector 방식(정해진 곳으로 jump)을 이용
- ISR interrupt service routine - 각각의 인터럽트를 처리하기 위한 작은 프로그램들
- Interrupt-drive I/O Cycle

- CPU가 어떤 일을 하고 있음
- I/O controller가 작업(전송 같은 것들)을 마치고 마무리로 인터럽트를 발생시킴
- 인터럽트가 들어오면 CPU가 하던일을 멈추고 작업중이던 현재 상태을 저장한 후 interrupt handler에게 권한을 넘겨줌
- interrupt service routine이 하는 일을 동작
- 다 끝나면 다시 끝났다는 신호를 보냄
- 신호를 받은 CPU는 저장된 상태를 불러와(resume) 원래 하던 일을 계속 진행
- 위 과정 반복
- 운영체제는 저장장치가 꼭 필요함
- Main memory(RAM) - 휘발성 메모리(전원이 없어지면 내용도 없어짐), 용량대비 가격이 저렴하고 속도가 빠르기 때문
- Hard Disk Drives(HDD) - 마그네틱(자석) 디스크를 이용해서 데이터를 읽어냄, 비휘발성 메모리, 용량대비 단가가 가장 저렴
- SSD - 전자장치를 이용한 비휘발성 메모
- 단위들
- bit - 전자적인 방법의 컴퓨터들 중에는 가장 작은 단위
- word - 시스템마다 값이 다름, 시스템에 맞춰서 편하게 다룰 수 있도록 맞춤
- Byte -> KB -> MB -> GB -> TB -> PB : 1024배씩 차이가 남
- 속도, 비용, 휘발성 등을 기준으로 계층을 설명할 수 있음

- 위로 갈수록 용량은 적고, 속도는 빠르고, 비용이 비싸지는 형태
- 위의 세가지는 휘발성, 나머지는 비휘발성 메모리
- register - CPU내에 있는 메모리로써 매우 빠른 메모리 -> 이름이 숫자나 알파벳 등으로 정해져 있음

- A von Neumann (폰 노이만형 방식) - 명령과 데이터를 메모리에 넣고 하나씩 가지고 와서 처리하는 방식
- 비 노이만형 방식 - 데이터의 처리를 고속, 고도화 하기위해 병렬화를 함, 명령과 데이터 버스를 분리하여 처리하여 빠르게 처리 가능
- I/O 장치에는 버퍼가 존재하는데, 버퍼에 있는 데이터를 메인메모리에 옮겨놓을 필요가 있음
- 어떤 번지에 있는 메모리를 다른 번지에 옮기는 방법? - CPU가 하나씩 불러와 옮기는 방법이 있지만 너무 단순해서 CPU가 할 필요가 없고 CPU가 원래 하던일을 하지 못하는 경우가 생김 -> 효율이 좋지 않다.
- 따라서 CPU는 하던 일을 계속하고 다이렉트로 데이터를 옮기는 방식(줄여서 DMA라고 함)
- 컴퓨터 시스템은 프로세서의 숫자에 따라 구조도 많이 달라진다.
- 프로세서 : CPU와 같은 물리적인 처리 장치
- 프로세스 : 프로그램의 실행 단위
- 하나의 프로세서를 가지는 시스템 - CPU가 메인메모리를 혼자 다 쓸 수 있어서 간단
- 프로세서가 2개 이상 있는 경우(멀티 프로세서) - 메모리는 하나이기 때문에 효율이 떨어짐
- 물리적인 프로세서는 하나지만 내부적인 구성(core)은 여러개가 있는 프로세서를 Multicore라고 한다.
- Non-Uniform Memory Access System(NUMA 구조) - CPU는 4개, 각각의 CPU마다 우선 접근할 수 있는 메모리를 만들어 한쌍으로 만듦(메모리가 4개) -> 다른 CPU들도 각각의 메모리를 사용할 수 있음(버스를 이용)

- Clustered Systems - 컴퓨터하나가 하나의 CPU인 것처럼 생각하고 연결하여 사용하는 시스템
