반효경 교수님의 운영체제 강의를 듣고 정리하였습니다.

또한, HAEIN님의 블로그를 참조하였습니다.

컴퓨터 시스템 구조

(사진 출처: KOCW)

 

 

동기식 입출력과 비동기식 입출력

(사진 출처: 깃허브 블로그)

  • 동기식 입출력 (synchronous I/O)
    • I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어감
    • 입출력 작업이 완료되었음을 확인한 후 이어서 프로그램을 수행하고 싶을 때
    • 구현 방법 1
      • I/O가 끝날 때까지 CPU를 낭비시킴
      • 매 시점 하나의 I/O만 일어날 수 있음
    • 구현 방법 2
      • I/O가 완료될 때까지 해당 프로그램에게서 CPU를 빼앗음
      • I/O 처리를 기다리는 줄에 그 프로그램을 줄 세움
      • 다른 프로그램에게 CPU를 줌
  • 비동기식 입출력 (asynchronous I/O)
    • I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감
    • 입출력 작업의 완료와 상관 없이 이어서 프로그램을 수행하고 싶을 때

** 두 경우 모두 I/O의 완료는 인터럽트로 알려줌

 

 

DMA (Direct Memory Access)

(사진 출처: Quora)

  • 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용
  • CPU의 개입 없이 I/O 장치와 메모리 사이의 데이터를 전송하는 접근 방식
    • CPU의 중재 없이 device controller가 device의 buffer storage의 내용을 메모리에 block 단위로 직접 전송
  • 바이트 단위가 아니라 block 단위로 인터럽트를 발생시킴
    • 고속의 I/O 장치의 경우 빈번한 인터럽트가 발생하는데 DMA를 사용함으로써 프로그램 수행 중 인터럽트 발생 횟수를 최소화한다.
  • 메모리에 접근할 수 있는 장치는 원래 CPU밖에 없음

 

서로 다른 입출력 명령어

  • I/O를 수행하는 special instruction에 의해(isolated I/O)
  • Memory Mapped I/O에 의해

(사진 출처: 티스토리)

 

 

저장장치 계층구조

(사진 출처: 깃허브 블로그)

  • Primary(Executable)은 CPU가 직접 접근 가능함 (Byte 단위의 접근이 가능)
  • Secondary는 CPU가 직접 접근하지 못 (Sector 단위의 접근이 가능)
  • Cache는 register와 main memory 간의 속도 차를 완충하기 위해서 존재 (컴퓨터의 성능을 향상시키기 위해 사용)
    • CPU와 주기억장치 사이에 존재, 자주 사용되는 데이터를 기억
    • 데이터의 재사용
      • 상대적으로 느린 메인 메모리 접근 횟수를 줄임

 

프로그램의 실행 (메모리 load)

 

(사진 출처: 깃허브 블로그)

  • 프로그램들은 처음에 실행파일 하드디스크에 저장
    • 실행파일을 실행하면 메모리에 로드되고 이것이 프로세스
  • 정확히는 물리적 메모리(Physical Memory)에 바로 올라가지 않고 가상 메모리(Virtual Memory)를 거친다.
    • 프로그램 실행 시 Address Space(각 프로그램마다 독자적으로 가지고 있는 가상 메모리 주소 공간)가 만들어짐. 종료 시 사라짐
      • Stack: 함수 호출 및 리턴
        Data: 지역 변수, 전역 변수, 자료구조
        Code: 프로그램 기계어 코드
      • 메모리를 낭비하지 않기 위해, 당장 필요한 것만 물리적 메모리에 존재
      • 나머지 부분은 프로그램 종료시까지 Swap Area에 존재
  • kernel은 컴퓨터 부팅 이후 항상 메모리에 상주
  • Swap Area
    • 메모리 용량의 한계로, 메모리 연장 공간으로써 사용

 

커널 주소 공간의 내용

(사진 출처: 깃허브 블로그)

 

 

사용자 프로그램이 사용하는 함수

  • 사용자 정의 함수
    • 자신의 프로그램에서 정의한 함수
  • 라이브러리 함수
    • 자신의 프로그램에서 정의하지 않고 갖다 쓴 함수
    • 자신의 프로그램의 실행 파일에 포함되어 있다.
  • 커널 함수
    • 운영체제 프로그램의 함수
    • 커널 함수의 호출 = 시스템 콜
  • 사용자 정의 함수와 라이브러리 함수는 해당 프로세스의 address space 공간 code 영역에 존재
  • 커널 함수는 커널의 address space 공간 code 영역에 존재

 

프로그램의 실행

(사진 출처: 벨로그)

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기