CS/OS 수업 / / 2021. 3. 15. 08:34

운영체제 2주차


프로세서(Processor)

  • 중앙처리장치(Cetral Processing Unit)라고 함
  • 전원이 켜지면, 메모리의 첫 부분(0번지) 또는 끝부분(0xffffff) 내용을 읽어 실행함.
  • 프로세서의 기본구조
    • Control Unit
      • 명령어(기계어, mov, add, jmp ...)를 해석하는 명령어 해석기(instruction decoder), 제어 로직으로 구성됨
      • 명령어를 읽고 실행을 위한 로직을 수행
    • ALU(Arithmetic & Login Unit)
      • 산술 연산: 덧셈, 뺄셈, 곱셈, 쉬프트 연산 등을 수행
      • 논리 연산: 논리 AND, OR, XOR, NOT, 보수 연산 등을 수행
      • 연산 처리 후의 상태(overflow, nagative, positive 등등)를 상태 레지스터에 저장함
    • 레지스터(Register): 프로세서 내에 일시적으로 데이터를 보관하고 ALU의 산술, 논리 연산을 위한 데이터 저장 장소
      • 범용 레지스터(general register): 프로그램, 데이터 처리를 위한 레지스터
      • 제어 레지스터(control register): 프로그램 제어, 프로세서의 제어를 위해 사용하는 레지스터(예: Program Counter, Stack Pointer 레지스터)
      • 상태 레지스터(status register): 프로세서의 산술 연산의 결과(음수인지 양수인지 오버플로우 났는지 등), 동작 모드들을 나타내는 레지스터
      • 인덱스 레지스터(index register): 데이터의 어드레싱(데이터가 메모리에 어디에 위치하는가 등), 데이터 처리를 위해 사용되는 레지스터
      • CPU의 Controll Unit에는 Controller, PC, IR이 있다. IR(Instruction Register)이 메모리로부터 명령어를 읽어오면 Controller가 IR의 명령어를 가져와서 해석한다(단순히 산술 연산이면 ALU가 실행한다)그러면 PC의 값이 하나 증가한다. 즉, IR의 메모리로부터 순차적으로 실행해야 할 명령어를 읽어오는 레지스터이고 PC는 IR이 어디까지 메모리를 읽었는지 카운트하는 레지스터이다.
      • 컴퓨터의 전원을 키면, 프로세서는 메모리의 0번지 혹은 마지막 번지를 읽어온다. 만약 프로세서가 0번지를 읽으려고 하면 IR로 메모리의 0번지를 읽어오고 PC가 0으로 초기화된다.
    • Bus: 프로세서와 메모리 간에 데이터가 이동하는 통로
  • 프로세서의 기능
    • 메모리에서 명령어를 읽기
    • 메모리에서 데이터를 쓰기
    • 메모리에서 데이터를 읽기
    • I/O 장치에 데이터를 쓰기
    • I/O 장치에 데이터를 읽기
    • 연산(산술, 논리 등)
  • 프로세서의 동작
  • 프로세서의 모드
    • 권한 수준(privilege level)이라고 함
    • 모드에 따라 프로세서가 실행할 수 있는 명령어들이 다르다.
    • 일반적으로 상태 레지스터에 모드 비트(커널 모드 vs 유저모드)가 있다. 상태 레지스터는 산술 연산을 하면 상태가 생기고, 그 연산 결과의 상태를 저장하는 레지스터인데. 연산 결과의 상태 뿐만 아니라 모드 또한 저장한다.
    • 모드의 종류
      • 사용자 모드(user mode): 제한된 명령어만 실행할 수 있는 상태
      • 커널 모드(kernel mode, supervisor mode, privilege mode): 제한없이 모든 명령어를 실행할 수 있는 상태

명령어

  • 기계어라고도 함
  • 프로세서가 직접 실행할 수 있는 명령어
  • 명령어 종류
    • 데이터 처리 명령어: add, subtract, multiply, shift, compare, etc
    • 데이터 이동 명령어: 명령어에서 메모리로 이동(move), 메모리에서 레지스터로 이동(load), 레지스터에서 메모리로 이동(store)
    • 실행 제어 명령어: branch, conditional branch(jump) 등
    • 특수 명령어: 프로세서 모드(사용자 모드, 커널모드) 변경, 입출력(I/O) 명령어 등
      • 특수 명령어는 커널 모드에서만 실행 가능하다. 왜 이렇게 하냐? I/O를 사용자 프로그램에서 직접하게 되면 시스템이 파괴될 수 있으므로 커널이 사용자 프로그램 대신 I/O 를 하는 거다. 모드 역시 커널모드에서만 변경할 수 있다. 즉 ,사용자 모드에서는 모드를 변경할 수 없다.

    컴퓨터 언어

    • 프로그래밍 언어(Programming Language)
      • 컴퓨터 소프트웨어를 작성할 때 사용하는 언어
      • 고급 언어: C, C++, Java, Pascal, Basic 등
      • 저급 언어: 기계어를 사람이 이해하기 쉽도록 심볼화(mov, add, store ...)하여 만든 언어(예: 어셈블리어)
    • 컴파일러
      • 고급 언어를 기계어로 번역하는 프로그램
    • 어셈블러
      • 어셈블리어를 기계어로 번역하는 프로그램.

    버스

    • 같은 기능을 가진 신호선 묶음
    • 컴퓨터 시스템 각 부분 사이에 전기적인 신호를 전달
    • 대부분의 프로세서는 3개의 버스를 가짐
      • 주소 버스: 메모리 주소를 전달하기 위한 버스
      • 데이터 버스: 데이터를 전달하는 버스
      • 제어 버스: 제어 하기 위한 버스

    메모리

    • Volatile
      • RAM
        • SRAM
          • 읽고 쓰는 속도가 DRAM에 비해 Fast(active drive)
          • Less dense(4-6 transistors/bit)
          • 전원이 공급되는 한 데이터가 계속 유지됨. 리프레시할 필요가 없다. Stable (holds value as long as power applied)
          • 속도가 빨라서 캐시메모리로 사용
        • DRAM(보통 메모리라고 하면 DRAM을 말함)
          • 읽고 쓰는 속도가 SRAM에 비해 Slower
          • 그럼에도 불구하고 DRAM을 사용하는 이유는 1bit를 저장하는데 transistor를 1개만 사용해도 돼서 DRAM 사용 → 집적도가 좋다. High desity(1 transistor/bit)
          • DRAM이 속도가 느린 이유는 계속 refresh를 해줘야 한다. (전원이 계속 공급되고 있더라도 다시 써주고 다시 써주고)Unstable(needs refresh)
    • Non-Volatile
      • Read-Only Memory(ROM)
        • Programmable ROM: 여러 번 쓸 수 있는 ROM
          • EEPROM: 삭제하고 쓸 수 있는 ROM
            • NOR Flash Memory
            • NAND Flash Memory: USB, SSD
        • Mask ROM: 읽을 수만 있는

    저장장치

    • 주 기억장치(Main memory)
      • CPU가 직접 접근할 수 있는 저장 매체
      • RAM
      • 휘발성
    • 2차 저장장치(Secondary storage)
      • 비휘발성 저장 기능 제공
      • HDD, CD, Tape 등
      • Flash memory를 사용하는 저장장치
        • USB
        • Memory Card
        • Solid State Disk(SSD)
    • 저장장치 계층
      • 저장 시스템은 다음과 같은 성질에 따라 계층을 구성한다
        • 속도: read/write 시간
        • 가격: 비트당 비용
        • 휘발성
        • 상위 레벨은 가격은 비싸지만 빠르고 하위 레벨로 갈수록 가격은 감소하지만 접근 시간은 증가
        • CPU와 캐시, 메인 메모리 간의 전송은 OS의 수행없이 하드웨어적으로 이루어지고, 디스크와 메인 메모리 간의 전송은 OS에 의해 이루어진다.
          1. register (CPU 안에 있음)
          1. cache
          1. main memory
          1. electronic disk
          1. magnetic disk (HDD)
          1. optical disk
          1. magnetic tapes
    • 캐싱(caching)
      • 캐싱이란, 사용 중인 데이터를 느린 저장장치에서 빠른 저장장치로 임시로 복사하는 것을 말한다.
        • 캐싱이 필요한 이유는 로직을 처리하는 데 있어서 빠른 접근성을 제공하는 것이며, 단순히 수동적으로 보관하는 것에 그치지 않고 이를 응용해서 작업의 결과를 저장함으로써 해당 로직의 불필요한 수행을 줄여주는 능동적인 역할까지 수행한다. 캐시로 사용하기 위한 가장 중요한 요건은 데이터로의 접근성인데, 원하는 데이터에 직접 접근하거나 만들어내는 비용보다 저렴해야 한다. 데이터가 필요할 때, 캐시를 먼저 검사하여 만약 있다면, 캐시에 있는 정보를 사용하여 빠르게 가져올 수 있고, 만약 캐시가 없다면 데이터를 캐시로 복사한 후에 사용하는데 이는 추후 캐시에서 빠르게 가져올 수 있게 하기 위함이다.
        • 캐시 메모리가 나오게 된 배경은 아래와 같다. CPU의 클럭 속도가 매우 빨라짐에 따라 CPU 밖에 있는 DRAM과의 속도 차이가 현저하게 증가하였는데, 이 때문에 CPU 클럭 속도를 아무리 올려도 DRAM에서 데이터를 빠르게 제공해 주지 못하여 전체 시스템 성능이 증가하기 어렵게 되었다. 메모리 기술은 주로 축전기를 사용하는 DRAM과 플립플롭을 사용하는 SRAM으로 나뉘는데, DRAM은 가격이 싸고 용량 대비 크기가 작지만 속도가 느리고, SRAM은 속도는 빠르지만 가격이 비싸고 용량 대비 크기가 크다는 단점이 있다. 그래서 DRAM을 사용자가 직접 장착하게 하는 대신, CPU와 DRAM 사이에 SRAM을 별도로 두어서 DRAM의 데이터를 직접 접근하는 것보다는 빠르게 접근할 수 있도록 한다. 여기에 사용하는 SRAM을 캐시 메모리라고 한다.
      • 이때, 빠른 저장장치를 캐시(cache)라고 부른다. (위의 캐시 메모리와 다른 개념이다)
      • 데이터가 필요할 때
        • 만약 있다면, 캐시에 있는 정보를 사용(빠르다)
        • 만약 없다면, 데이터를 캐시로 복사한 후 사용
      • 캐시 크기(cache size)와 교체 정책(replacement policy)
        • 캐시의 크기는 정해져 있으므로, 무한히 데이터를 복사할 수 없다.
        • 캐시가 다 찼는데, 데이터를 또 저장해야 한다면, 이미 캐시에 있는 데이터의 일부를 제거하고 새 데이터를 저장한다. 이를 교체(replacement)라고 부른다.
        • 제거할 데이터를 결정하는 것을 교체 정책이라고 부른다.

    인터럽트(Interrupt)

    • 인터럽트
      • CPU에게 어떤 사건이 발생했음을 알리는 것
      • CPU가 처리할 인터럽트가 정해져 있음(보통 수십 ~ 수백 개)
    • 인터럽트 유형
      • 하드웨어 인터럽트
        • 입출력 장치에서 입출력의 종료를 알림(예를 들어, 프린터 출력이 종료되면 CPU에게 인터럽트 신호가 간다)
        • 타이머 장치에서 주기적으로 알림
      • 소프트웨어 인터럽트(트랩, trap)
        • 프로그램 오류: 0으로 나누기, 잘못된 주소 참조 등
        • 사용자(프로그램)의 서비스 요청: 시스템 호출(system call)
    • 인터럽트가 발생하면, CPU는 현재 수행하던 일을 중단하고 상태 레지스터와 PC등을 스택에 잠시 저장한 후 인터럽트 서비스 루틴으로 점프한다. 잠시 저장하는 이유는 인터럽트가 끝나고 난 후 다시 원래의 해당 작업으로 돌아와야 하기 때문이다.
      1. 주 프로그램 실행 중
      1. 인터럽트 발생
      1. 복귀 주소 저장
      1. 인터럽트 백터로 점프
      1. 인터럽트 처리
      1. 인터럽트 처리 완료
      1. 복귀 주소 로드
      1. 마지막에 실행되던 주소로 점프
      1. 주 프로그램 계속 실행
      • 인터럽트 서비스 루틴(Interrupt Service Routine, ISR): 운영체제 내부의 코드. CPU는 하던 일을 멈추고 OS가 수행된다.
    • 인터럽트 백터
      • 각 인터럽트에는 번호가 할당되어 있다.
      • 메인 메모리의 지정된 영역에 각 인터럽트를 처리할 코드(인터럽트 서비스 루틴)의 시작 주소가 저장된다.
        • 인터럽트 백터: ISR(인터럽트 서비스 루틴)의 시작 주소
        • 인터럽트 백터 테이블: 인터럽트 백터들이 저장되어 있는 영역
      • 컴퓨터가 부팅될 때, OS는 인터럽트 벡터 테이블 값을 초기화한다.
        • 즉, 인터럽트 백터마다 대응하는 ISR 주소값을 셋팅한다.
        • 예를 들어, INT1의 벡터에는 INT1을 처리하는 SIR의 주소 값을 저장함
    • 인터럽트 처리 과정
      • 인터럽트 처리는 먼저 하드웨어적 처리가 수행되고, 다음으로 소프트웨어적 처리가 수행됨
      • 하드웨어적 처리
        • 프로세서 내의 상태 레지스터 값을 저장
        • 프로세서 모드를 커널 모드로 변경(모드 비트를 변경)
        • PC 레지스터 값을 저장
        • 발생된 인터럽트의 백터 값(ISR 주소)을 PC 레지스터에 저장 (OS 내의 인터럽트 서비스 루틴을 수행하게 됨) → 왜 ISR 주소 값을 저장하지? 실행되고 있는 프로세스 명령어 주소를 저장해야 하는 거 아닌가?
      • 소프트웨어적 처리(OS가 수행함)
        • CPU 레지스터들의 값을 저장(메모리에 저장)
        • 인터럽트 처리 코드(ISR 코드)를 수행
        • CPU 레지스터 값을 복원(저장된 값들을 CPU 레지스터에 load)
        • 상태 레지스터 값을 복원(프로세서 모드가 이전 모드로 변경됨)
        • PC 레지스터 값을 복원(인터럽트가 발생하여 중단된 곳으로 돌아가게 됨)

'CS > OS 수업' 카테고리의 다른 글

운영체제 8주차  (0) 2021.04.20
운영체제 7주차  (0) 2021.04.14
운영체제 6주차  (1) 2021.04.05
운영체제 4주차  (0) 2021.03.22
운영체제 3주차  (0) 2021.03.15
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유