1. 컴퓨터의 시스템 구조
==> 크게 3가지로 구성됨.
I/O device
memory
processor(CPU)
2. processor : 중앙처리장치(CPU)라고도 함
1) 프로세서의 기본 구조
* control Unit : 명령어 해석기, 제어 로직으로 구성됨
==> 명령어를 읽고 실행하는 로직을 수행
* ALU(Arithmetic and Logic Unit) : 산술, 논리 연산장치.
==> 사칙연산과 논리 연산, 보수연산 등을 수행
연산 처리 후의 상태를 상태 레지스터에 저장함
(ex. overflow(연산범위 초과), positive(연산 결과 양수)..)
* BUS : 프로세서와 메모리를 연결하는 데이터의 통로
(ex. 데이터 bus, 주소 bus, 제어 bus)
* Register : 프로세서 내에서 일시적으로 데이터를 저장하고 ALU의 산술, 논리 연산을
위한 데이터 저장장소
- 범용 레지스터 : 일반적인 프로그램이나 데이터의 처리를 위한 레지스터
- 제어 레지스터 : 프로세서 및 프로세서의 제어를 위해 사용되는 레지스터
(ex. PC(program counter), SP 레지스터....)
- 상태 레지스터 : 프로세서의 산술 연산의 결과 또는 프로세서의 동작모드(상태)를
저장하는 레지스터
- 인덱스 레지스터 : 데이터의 어드레싱 및 데이터의 처리를 위해 사용되는 레지스터
==> 명령어를 읽고 실행하는 로직을 수행
* ALU(Arithmetic and Logic Unit) : 산술, 논리 연산장치.
==> 사칙연산과 논리 연산, 보수연산 등을 수행
연산 처리 후의 상태를 상태 레지스터에 저장함
(ex. overflow(연산범위 초과), positive(연산 결과 양수)..)
* BUS : 프로세서와 메모리를 연결하는 데이터의 통로
(ex. 데이터 bus, 주소 bus, 제어 bus)
* Register : 프로세서 내에서 일시적으로 데이터를 저장하고 ALU의 산술, 논리 연산을
위한 데이터 저장장소
- 범용 레지스터 : 일반적인 프로그램이나 데이터의 처리를 위한 레지스터
- 제어 레지스터 : 프로세서 및 프로세서의 제어를 위해 사용되는 레지스터
(ex. PC(program counter), SP 레지스터....)
- 상태 레지스터 : 프로세서의 산술 연산의 결과 또는 프로세서의 동작모드(상태)를
저장하는 레지스터
- 인덱스 레지스터 : 데이터의 어드레싱 및 데이터의 처리를 위해 사용되는 레지스터
ps) 범용, 제어, 인덱스 레지스터는 한 CPU안에 다수 존재하지만
상태 레지스터는 단 하나만 존재한다.
* PC(program counter) : 레지스터의 일종으로 IP(Instruction Pointer)라고도 부른다.
컴퓨터 부팅시 최초로 실행되며 첫부분(0) 또는 끝부분(0xf...f)로 초기화됨
* IR(instruction Register) : PC와 같이 CPU에 내장된 레지스터. processor가 PC를 통해
넘겨 받은 주소따라 IR이 해당 주소의 데이터를 controller에 옮김.
2) 프로세서의 기능
* Processor의 기능 6가지:
1. 메모리에서 명령어 읽기
2. 메모리에 데이터를 쓰기
3. 메모리에서 데이터를 읽기
4. I/O 장치에 데이터를 쓰기
5. I/O 장치에 데이터를 읽기
6. 연산 (ALU)
3) 프로세서의 동작
==> 즉, 응용 프로그램은
응용프로그램이 실행됨 --> 운영체제가 PC에 해당 프로그램의 memory주소를 입력(Fetch, Decode) -->PC를 통해 넘겨 받은 주소를 따라 IR이 해당 주소의 데이터를 controller에 옮김(Fetch operands) ---> 실행 후 PC의 값을 1 증가시킴(Execute) ---> PC를 통해 넘겨 받은 주소를 따라 IR이 해당 주소의 데이터를 controller에 옮김(Fetch operands) ---> 실행 후 PC의 값을 1 증가시킴(Execute) ----> ...........
이러한 순서에 의해 실행됨.
4) 프로세서의 모드
* 프로세서 모드(mode)
: 모드에 따라서 프로세서가 쓸 수 있는 명령어들이 다르다.
일반적으로 상태 레지스터에 모드 비트가 있어서 그곳에 모드를 표시함
권한 수준(privilege level)이라고도 부름
* 모드의 종류
* 사용자 모드(user mode) : 제한된 명령어만 실행 가능하며 주로 응용프로그램이 사용
=> ex. 100개의 명령어중 80개만 사용 가능
* 커널 모드(kernel mode) : 모든 명령어의 실행이 가능하며 주로 운영체제가 사용
=> ex. 100개의 명령어중 100개 모두 사용 가능
=====> CPU마다 조금의 차이가 있지만 사용자모드와 커널모드는 사용할 수 있는
명령어의 제한이 다르므로 이 때문에 모드를 흔히 권한수준이라고도 부른다.
* 모드를 사용하는 이유
: 응용프로그램을 수행할 때 프로세서의 모드를 사용자 모드로 설정하여 응용프로그램이
system을 건드리지 못하게 함으로서 시스템을 보호한다. 한편 운영체제가 실행될 때는
프로세서의 모드를 커널 모드로 설정하여 시스템을 관리하게 된다.
상태 레지스터는 단 하나만 존재한다.
* PC(program counter) : 레지스터의 일종으로 IP(Instruction Pointer)라고도 부른다.
컴퓨터 부팅시 최초로 실행되며 첫부분(0) 또는 끝부분(0xf...f)로 초기화됨
* IR(instruction Register) : PC와 같이 CPU에 내장된 레지스터. processor가 PC를 통해
넘겨 받은 주소따라 IR이 해당 주소의 데이터를 controller에 옮김.
2) 프로세서의 기능
* Processor의 기능 6가지:
1. 메모리에서 명령어 읽기
2. 메모리에 데이터를 쓰기
3. 메모리에서 데이터를 읽기
4. I/O 장치에 데이터를 쓰기
5. I/O 장치에 데이터를 읽기
6. 연산 (ALU)
3) 프로세서의 동작
==> 즉, 응용 프로그램은
응용프로그램이 실행됨 --> 운영체제가 PC에 해당 프로그램의 memory주소를 입력(Fetch, Decode) -->PC를 통해 넘겨 받은 주소를 따라 IR이 해당 주소의 데이터를 controller에 옮김(Fetch operands) ---> 실행 후 PC의 값을 1 증가시킴(Execute) ---> PC를 통해 넘겨 받은 주소를 따라 IR이 해당 주소의 데이터를 controller에 옮김(Fetch operands) ---> 실행 후 PC의 값을 1 증가시킴(Execute) ----> ...........
이러한 순서에 의해 실행됨.
4) 프로세서의 모드
* 프로세서 모드(mode)
: 모드에 따라서 프로세서가 쓸 수 있는 명령어들이 다르다.
일반적으로 상태 레지스터에 모드 비트가 있어서 그곳에 모드를 표시함
권한 수준(privilege level)이라고도 부름
* 모드의 종류
* 사용자 모드(user mode) : 제한된 명령어만 실행 가능하며 주로 응용프로그램이 사용
=> ex. 100개의 명령어중 80개만 사용 가능
* 커널 모드(kernel mode) : 모든 명령어의 실행이 가능하며 주로 운영체제가 사용
=> ex. 100개의 명령어중 100개 모두 사용 가능
=====> CPU마다 조금의 차이가 있지만 사용자모드와 커널모드는 사용할 수 있는
명령어의 제한이 다르므로 이 때문에 모드를 흔히 권한수준이라고도 부른다.
* 모드를 사용하는 이유
: 응용프로그램을 수행할 때 프로세서의 모드를 사용자 모드로 설정하여 응용프로그램이
system을 건드리지 못하게 함으로서 시스템을 보호한다. 한편 운영체제가 실행될 때는
프로세서의 모드를 커널 모드로 설정하여 시스템을 관리하게 된다.
3. 프로세서 명령어
: 기계어(machine language)라고도 부름
* 명령어 종류:
- 데이터 처리 명령어 : add,subtract, shift....
- 데이터 이동 명령어 : 메모리에서 메모리로 이동(move),
메모리에서 레지스터로 이동(load),
레지스터에서 메모리로 이동(store) 등
- 실행 제어 명령어 : branch, conditional branch 등
- 특수 명령어 : 프로세서 모드 변경, 입출력 명령어 등
(모드 변경하는 명령어)
==> 사용자 모드 명령어 : 데이터 처리, 데이터 이동, 실행제어까지만 사용 가능
ex. application
커널 모드 명령어 : 데이터 처리, 데이터 이동, 실행제어 특수명령어까지 모두 사용가능
ex. operating system
4. 컴퓨터 언어
* 프로그래밍 언어
: 소프트웨어를 작성할 때 사용하는 언어
* 컴파일러
: 고급 언어를 기계어로 번역하는 프로그램
* 어셈블러
: 어셈블리어를 기계어로 번역하는 프로그램
==>기계어의 전기적 신호를 add같은 단어로 상징화 한것.
* 기계어
: 숫자 (0, 1)로 표현
5. 버스
* 같은 기능을 가진 신호선 묶음
* 컴퓨터 시스템 각 부분 사이에 전기적인 신호를 전달하는 역할
* 대부분의 프로세서는 3개의 버스(주소버스, 데이터버스, 제어버스)를 가짐
6. 메모리
1) RAM(Random Access Memory)
* 전원이 인가되는 상태에서만 데이터를 유지(volatile)
- SRAM(Static RAM)
: 밀도가 낮아(4-6 transistors/bit) 속도가 빠르고 전원이 켜져있는 동안 데이터를 계속
보유하고 있어 가격이 비싸다.
- DRAM(Dynamic RAM)
: 밀도가 높아(1 transistors/bit) 속도가 비교적 느리고 시간이 지날수록 데이터가
깨지므로 지속적인 refresh가 필요해 가격이 싸다. => 메인으로 자주 사용됨
ex. RAM이 큰 스마트폰의 경우 DRAM을 사용하면 refresh해야할 용량이 크기 때문에
전력소모가 많다.
2) ROM(Read-Only Memory)
* 전원이 없어도 데이터가 유지됨(non-volatile)
ex. Mask ROM(한번 기록되면 변경 불가)
PROM(지정된 횟수만 변경 가능... 이후 변경 불가)
EPROM, EEPROM
7.저장장치
1) 주기억장치(main memory)
- CPU가 직접 접근
- RAM
- 휘발성
2) 2차 저정장치(secondary storage)
- 비휘발성 저장기능을 제공
- HDD, CD, Tape 등
- NAND Flash를 사용하는 저장장치
ex. USB, Memory Card, SSD
3) 기억장치 계층
- 다음 3가지 성질에 의해 계층을 구성한다. (속도: 읽고 쓰는 시간, 가격: bit당 가격
, 휘발성 : 전원이 꺼졌을때 데이터가 남아있는가)
- 상위 레벨로 갈수록 가격이 비싸지만 빠르고,
하위 레벨로 갈수록 가격은 싸지만 속도가 느리다.
- CPU, 캐시, 레지스터간의 전송은 하드웨어적으로 이뤄지고,
디스크와 주기억 장치간의 전송은 운영체제에 의해 이뤄진다.
1차 저장장치(register, cache, main memory) : 휘발성, 빠르다, 비싸다
2차 저장장치(electronic ~ tapes) : 비휘발성, 느리다, 싸다.
4) 캐싱
: 사용중인 데이터를 느린 저장장치에서 빠른 저장장치로 임시로 복사(휘발성)하는 것
이때, 빠른 저장장치를 캐시라고 부른다. ex. register, cache, main memory
=> 하드에 있는 것을 cache에 미리 가져다 두는 것.
- 데이터가 필요할 때, 우선적으로 캐시를 검사함
-> 만약 있다면 캐시에 있는 정보 사용!!(빠르다)
but, 없다면 데이터를 캐시로 복사한 후 사용한다.
- 캐시의 용량는 비교적 작아서 무한히 데이터를 복사해 둘수 없다. --> 캐시가 가득
차게되면 이미 캐시에 있는 데이터의 일부를 제거한뒤 새 데이터를 저장한다.(교체)
---> 이때 제거할 데이터를 결정하는 것을 교체정책이라한다.
(교체 정책은 교체알고리즘에 의해 정해짐) ==> 운영체제의 역할
* 인터럽트의 유형 :
- 하드웨어 인터럽트
: 입출력 장치에서 입출력의 종료를 알림
타이머 장치에서 주기적으로 알림
- 소프트웨어 인터럽트(trap)
: 프로그램 오류 : 0으로 나누기, 잘못된 주소 참조등..
사용자의 서비스 요청 ==> 시스템 호출
* 인터럽트가 발생하면, CPU는 현재 수행하던 일을 멈추고 인터럽트 서비스 루틴을
수행한다. (인터럽트 서비스(처리) 루틴 : 운영체제 내부의 코드로 운영체제가 수행됨)
===> 그렇다면 이렇게 다양한 interrupt들을 CPU는 어떻게 구분할까?
답 : 각 인터럽트에는 번호가 할당되어 있다! (인터럽트 벡터)
=> 인터럽트 서비스 루틴의 시작주소
* 메모리의 지정된 영역에 각 인터럽트를 처리할 코드(입터럽트 서비스 루틴)의
시작주소가 저장된다.
- 인터럽트 벡터 : 인터럽트 서비스(처리) 루틴의 시작주소
- 인터럽트 벡터 테이블 : 인터럽트 벡터들이 저장되어 있는 영역
* OS가 부팅할 떄, OS는 인터럽트 벡터 테이블 값을 초기화한다.
==> 256개의 interrupt가 존재하며 CPU제작할 때 0 ~ 1000으로 번호가 지정되어 있다.
== > 운영체제는 인터럽트 서비스 루틴을 함수형태로 가지고 있어, CPU의 PC값에 해당 함수의 주소가 저장되고 IR가 해당 코드를 CU에 올리면서 인터럽트 서비스 루틴이 시작된다.
* 인터럽트 처리 과정
: 인터럽트 처리는 먼저 하드웨어적 처리가 수행되고, 다음으로 소프트웨어적 처리가
수행됨
* 하드웨어적 처리
1. 상태 레지스터 값을 저장(모드변경을 위해서)
2. 프로세서 모드를 커널모드로 변경(운영체제는 커널모드에서 실행되므로)
3. PC 레지스터 값을 저장 (다음 해야 할 일을 별도의 공간에 저장)
4. 인터럽트 벡터 값을 PC레지스터에 저장
(이후 OS내의 인터럽트 서비스 루틴을 수행하게 됨
* 소프트웨어적 처리
5. CPU레지스터 값을 저장 (CPU가 현재 하고 있는 일을 레지스터에 저장)
6. 인터럽트 처리 코드를 수행 (PC의 주소값을 따라가 해당 함수를 CU에 올려 실행)
7. CPU레지스터 값을 복원 (원래 하고 있던 일로 복귀)
8. 상태 레지스터 값을 복원 (프로세서 모드가 이전 모드로 변경됨)
9. PC레지스터 값을 복원 (인터럽트가 발생하여 중단되었던 곳으로 돌아가게 됨)
=====> 운영체제는 부팅을 제외하고 interrupt에 의해서만 수행됨!!
즉, interrupt에 의해 구동되는 소프트웨어는 운영체제뿐!!
3) 기억장치 계층
- 다음 3가지 성질에 의해 계층을 구성한다. (속도: 읽고 쓰는 시간, 가격: bit당 가격
, 휘발성 : 전원이 꺼졌을때 데이터가 남아있는가)
- 상위 레벨로 갈수록 가격이 비싸지만 빠르고,
하위 레벨로 갈수록 가격은 싸지만 속도가 느리다.
- CPU, 캐시, 레지스터간의 전송은 하드웨어적으로 이뤄지고,
디스크와 주기억 장치간의 전송은 운영체제에 의해 이뤄진다.
1차 저장장치(register, cache, main memory) : 휘발성, 빠르다, 비싸다
2차 저장장치(electronic ~ tapes) : 비휘발성, 느리다, 싸다.
4) 캐싱
: 사용중인 데이터를 느린 저장장치에서 빠른 저장장치로 임시로 복사(휘발성)하는 것
이때, 빠른 저장장치를 캐시라고 부른다. ex. register, cache, main memory
=> 하드에 있는 것을 cache에 미리 가져다 두는 것.
- 데이터가 필요할 때, 우선적으로 캐시를 검사함
-> 만약 있다면 캐시에 있는 정보 사용!!(빠르다)
but, 없다면 데이터를 캐시로 복사한 후 사용한다.
- 캐시의 용량는 비교적 작아서 무한히 데이터를 복사해 둘수 없다. --> 캐시가 가득
차게되면 이미 캐시에 있는 데이터의 일부를 제거한뒤 새 데이터를 저장한다.(교체)
---> 이때 제거할 데이터를 결정하는 것을 교체정책이라한다.
(교체 정책은 교체알고리즘에 의해 정해짐) ==> 운영체제의 역할
8.인터럽트(매우 중요!!)
: CPU에게 어떤 사건이 발생했음을 알리는 것!* 인터럽트의 유형 :
- 하드웨어 인터럽트
: 입출력 장치에서 입출력의 종료를 알림
타이머 장치에서 주기적으로 알림
- 소프트웨어 인터럽트(trap)
: 프로그램 오류 : 0으로 나누기, 잘못된 주소 참조등..
사용자의 서비스 요청 ==> 시스템 호출
* 인터럽트가 발생하면, CPU는 현재 수행하던 일을 멈추고 인터럽트 서비스 루틴을
수행한다. (인터럽트 서비스(처리) 루틴 : 운영체제 내부의 코드로 운영체제가 수행됨)
===> 그렇다면 이렇게 다양한 interrupt들을 CPU는 어떻게 구분할까?
답 : 각 인터럽트에는 번호가 할당되어 있다! (인터럽트 벡터)
=> 인터럽트 서비스 루틴의 시작주소
* 메모리의 지정된 영역에 각 인터럽트를 처리할 코드(입터럽트 서비스 루틴)의
시작주소가 저장된다.
- 인터럽트 벡터 : 인터럽트 서비스(처리) 루틴의 시작주소
- 인터럽트 벡터 테이블 : 인터럽트 벡터들이 저장되어 있는 영역
* OS가 부팅할 떄, OS는 인터럽트 벡터 테이블 값을 초기화한다.
==> 256개의 interrupt가 존재하며 CPU제작할 때 0 ~ 1000으로 번호가 지정되어 있다.
== > 운영체제는 인터럽트 서비스 루틴을 함수형태로 가지고 있어, CPU의 PC값에 해당 함수의 주소가 저장되고 IR가 해당 코드를 CU에 올리면서 인터럽트 서비스 루틴이 시작된다.
* 인터럽트 처리 과정
: 인터럽트 처리는 먼저 하드웨어적 처리가 수행되고, 다음으로 소프트웨어적 처리가
수행됨
* 하드웨어적 처리
1. 상태 레지스터 값을 저장(모드변경을 위해서)
2. 프로세서 모드를 커널모드로 변경(운영체제는 커널모드에서 실행되므로)
3. PC 레지스터 값을 저장 (다음 해야 할 일을 별도의 공간에 저장)
4. 인터럽트 벡터 값을 PC레지스터에 저장
(이후 OS내의 인터럽트 서비스 루틴을 수행하게 됨
* 소프트웨어적 처리
5. CPU레지스터 값을 저장 (CPU가 현재 하고 있는 일을 레지스터에 저장)
6. 인터럽트 처리 코드를 수행 (PC의 주소값을 따라가 해당 함수를 CU에 올려 실행)
7. CPU레지스터 값을 복원 (원래 하고 있던 일로 복귀)
8. 상태 레지스터 값을 복원 (프로세서 모드가 이전 모드로 변경됨)
9. PC레지스터 값을 복원 (인터럽트가 발생하여 중단되었던 곳으로 돌아가게 됨)
=====> 운영체제는 부팅을 제외하고 interrupt에 의해서만 수행됨!!
즉, interrupt에 의해 구동되는 소프트웨어는 운영체제뿐!!
댓글 없음:
댓글 쓰기