00. 컴퓨터 시스템의 구성요소
(1) 하드웨어 : 물리적인 컴퓨팅 자원
(2) 운영체제 : 응용프로그램의 하드웨어 사용을 제어하고 조정함
(3) 응용프로그램 : 사용자들의 문제를 해결하기 위한 프로그램(소프트웨어)
(4) 사용자 : 사람, 기계, 다른 컴퓨터
01. 컴퓨터 시스템 구조
(0) 컴퓨터 기본 기능 : 프로그램 코드를 정해진 순서대로 실행하는 것
(1) 중앙처리장치(Central Processing Unit: CPU)
- 프로세서라고도 한다.
- 메인 메모리에 저장된 인트럭션들을 해독하는 엔진이다.
- CPU 중심에는 워드 크기의 저장장치(레지스터)인 프로그램 카운터(PC)가 있다.
- CPU는 프로그램 카운터가 가리키는 곳의 인스트럭션을 반복적으로 실행한다.
- CPU registers : 메모리 보다 빠른 cpu의 저장공간
- CPU의 작업공간이 메모리이기 때문에 CPU는 매순간마다 메모리에서 instruction을 읽어서 실행하게 됨.
- CPU는 PC가 가리키는 메모리로부터 인스트럭션을 읽어오고, 이 인스트럭션 위치로 업데이트 한다.
(새로운 위치는 방금 수행한 인스트럭션과 메모리 상에 연속적일 수 있고, 그렇지 않을 수 있다.)
** CPU가 하는 단순한 작업의 예시
👉 적재(Load) : 메인 메모리에서 레지스터에 한 바이트 또는 웨드를 이전 값에 덮어쓰는 방식으로 복사한다.
👉 저장(Store): 레지스터에서 메인 메모리로 한바이트 또는 워드를 이전 값에 덮었쓰는 방식으로 복사한다.
👉 점프(Jump): 인스트럭션 자신으로부터 한 개의 워드를 추출하고, 이것을 PC에 덮어쓰기 방식으로 복사함
👉 작업(Operate) : 두 레지스터의 값을 ALU로 복사하고 두 개의 워드로 수식 연산을 수행한 뒤, 결과를 덮어쓰기 방식으로 레지스터에 저장한다.
jump : 메모리에서 코드를 읽다가 함수를 호출하면 인스트럭션의 메모리를 점프(이동)하는 것
(2) 기억장치(Memory)
- CPU 가까이 위치하며, 반도체 기억장치 칩들로 구성
- 영구 저장 능력이 없기 때문에, 일시적 저장장치로만 사용(휘발성 메모리)
(3) 입출력장치(I/O device)
- 입출력장치는 시스템과 외부세계와의 연결을 담당한다.
- 각 입출력 장치는 입출력 버스와 컨트롤러 어댑터를 통해 연결된다.
- 컨트를러는 디바이스 자체가 칩셋이거나 시스템의 인쇄기판에 장착
- 어댑터는 마더보드의 슬롯에 장착
(4) Mode bit
- mode bit : CPU에서 실행되는 것이 운영체제인지 아니면 사용자 프로그램인지 구분해준다.
- 사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보호장치 필요
- Mode bit을 통해 하드웨어적으로 두가지 모드의 operation 지원
👉 1 :사용자 모드 : 사용자 프로그램 실행
👉 0: 모니터 모드 : OS 코드 수행
- 보안을 해칠 수 있는 명렁어는 모니터 모드에서만 수행가능한 '특권 명령'으로 규정
- Interrupt나 Exception 발생 시 하드웨어가 mode bit을 0으로 바꿈
- 사용자 프로그램에게 CPU를 넘기기전에 mode bit을 1로 셋팅
- 모니터 모드는 (커널모드 , 시스템 모드라고도 함 )
(5) 타이머
- 정해진 시간이 흐른 뒤 운영체제에게 제어권이 넘어가도록 인터럽트를 발생시킴
- 타이머는 매 클럭 틱 때마다 1씩 감소
- 타이머 값이 0이 되면 CPU에 타이머 인터럽트 발생
- CPU를 특정 프로그램이 독점하는 것을 보호
- 타이머에 세팅함 시간을
- 타이머는 time sharing을 구현하기 위해 널리 이용됨
- 타이머는 현재 시간을 계산하기 위해서도 사용
👉 timer 하드웨어: 특정 프로그램이 CPU를 독점하는 것을 막기 위해 (운영체제)
👉 운영체제가 컴퓨터를 켰을때 운영체제가 CPU를 가지고 있다가 사용자 프로그램이 실행이 되면 그 프로그램에게 cpu를 넘겨준다.
👉 timer에다가 값을 세팅한다음에 사용자프로그램에게 cpu를 넘겨준다. (독점 금지 할당된 시간동안 사용할 수 있음)
👉 시간이 완료되면 타이머aqa가 cpu에게 인터럽트로 알려줌
👉 cpu는 실행중이였던 인스트럭션을 마치고 인터럽트 라인을 체크한다.
👉 인터럽트에 들어온게 없으면 cpu의 다음 라인 실행
👉 타이머가 interrupt를 걸어왔으면 cpu는 하던일을 잠시 멈추고 cpu의 제어권이 사용자 프로그램으로 부터 운영체제로 잠시 넘어가게 되어 있다.
👉 다음 프로그램에게 cpu제어권을 넘겨준다.
(4) DMA CONTROLLER
- 원래 메모리는 CPU만 접근할수있는거였는데, 많은 접근들이 cpu한테 interrupt를 거니까 CPU의 효율이 떨어짐
- 그래서 DMA controller를 두어서 메모리에 직접접근이 가능하게 사용함
- 메모리를 CPU 와 DMA를 같이 사용하게 되면 앙대니까 해당 관련된 controller는 memory controller가 해준다.
(5) Device Controller
👉 I/O의 경우 작은 cpu가 달려있는데 그것을 device controller라고 한다.
👉 I/O의 작업공간 : local buffer
👉 해당 I/O 장치유형을 관리하는 일종의 작은 CPU
👉 제어 정보를 위해 control register, status register를 가짐
👉 local buffer를 가짐(일종의 data register)
👉 I/O는 실제 device와 local buffer 사이에서 일어남
👉 device controller는 I/O가 끝났을 경우 interrupt로 CPU에 그 사실을 알림
👉 device driver(장치 구동기) : OS 코드 중 각 장치별 처리 루틴 -> software
👉 deviece controller(장치 제어기) : 각 장치를 통제하는 일종의 작은 CPU -> hardware
02. 입출력(I/O)의 수행
- 모든 입출력 명령은 특권 명령
- 사용자 프로그램은 어떻게 I/O를 할까?
👉 시스템콜 (system call) : 사용자 프로그램은 운영체제에게 I/O 요청
- 입출력은 OS가 담당함(보안상의 문제로인해)
- 사용자 프로그램이 I/O에 접근하려면 OS 메모리 주소값에 접근해야하는데 mode bit이 1이면 이동할 수 없음
- 그럼 어떻게 사용자 프로그램은 I/O를 진행하는가
- 사용자 프로그램이 직접 Interrupt line을 세팅하는 interrupt를 실행함
- 시스템 콜이란 사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출하는것
- trap을 사용하여 인터렙트 벡터의 특정위치로 이동
- 제어권이 인터럽트 벡터가 가리키는 인터럽트 서비스 루틴으로 이동
- 올바른 I/O 요청인지 확인 후 I/O 수행
- I/O 완료 시 제어권을 시스템 콜 다음명령으로 옮김
03. 인터럽트(Interrupt)
- 인터럽트 당한 시점의 레지스터와 program counter를 세이브한 후 CPU의 제어 인터럽트 처리 루틴에 넘긴다.
- 넓은 의미의 인터럽트
👉하드웨어 인터럽트 : 하드웨어가 발생시킨 인터럽트
👉Trap (소프트웨어 인터럽트) : Excuption-프로그램이 오류를 범한 경우
👉system call -프로그램이 커널 함수를 호출하는 경우
(1) 인터럽트 벡터 : 해당 인터럽트의 처리 루틴 주소를 가지고 있음
(2) 인터럽트 처리 루틴 : (Interrupt Service ROUTINE, 인터럽트 핸들러 ) : 해당 인터럽트를 처리하는 커널 함수
'Computer Systems' 카테고리의 다른 글
🖥[CSAPP] 9장. Malloc Lab 묵시적 가용 리스트 구현하기 (0) | 2022.10.30 |
---|---|
🖥[CSAPP] 9장. Malloc Lab 동적 메모리 할당 (2) | 2022.10.29 |
🖥[CSAPP] 1장. 운영체제는 하드웨어를 관리한다. (0) | 2022.10.29 |
🖥[CSAPP] 1장. 캐시가 정말 중요할까? (0) | 2022.10.29 |
👩🏼💻[CSAPP] 어셈블리어 (0) | 2022.10.29 |
댓글