본문 바로가기
Computer Systems

👩🏼‍💻[CSAPP] 1장. 컴퓨터 시스템 구조

by NOHCODING 2022. 10. 27.
반응형

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, 인터럽트 핸들러 ) : 해당 인터럽트를 처리하는 커널 함수  

 

 

반응형

댓글