[CS, 운영체제] System Structure & Program Execution

Sieun Dorothy Lee·2024년 4월 23일
0

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

  • 동기식 입출력 (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)

  • 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용
  • CPU의 중재 없이 device controller가 device의 buffer storage의 내용을 메모리에 block 단위로 직접 전송
  • 바이트 단위가 아니라 block 단위로 인터럽트를 발생시킴

서로 다른 입출력 명령어

  • I/O를 수행하는 special instruction에 의해 (일반적인 방식) : memory instruction 따로, I/O 장치 instruction 따로
  • Memory Mapped I/O에 의해 : memory 주소에 연장 주소(device I/O를 가리킴)를 붙임

저장장치 계층 구조


Registers > Cache Memory(SRAM) > Main Memory(DRAM) > Magnetic Disk > Optical Disk > Magnetic Tape
왼쪽을 갈수록, 속도가 빠르고 가격이 비싸고 용량이 적다

Primary => 휘발성, CPU에서 직접 접근 가능(바이트 단위로 접근 가능해야함) => 실행 가능
Secondary => 비휘발성, CPU에서 직접 접근 불가능(섹터 단위로 접근) => 실행 불가능

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


=> 실제로는

  • File System: 비휘발성 저장공간
  • 프로그램은 File System에 실행 파일 형태로 저장되어 있고, 이를 실행하면 메모리에 올라가 프로세스가 된다. 정확히 말하면, 물리적인 메모리에 프로그램이 바로 올라가는 것이 아니라 가상 메모리 단계를 추가로 거친다. 이때 독자적인 메모리 주소 공간이 형성되는데, 이 공간에는 Code, Data, Stack 영역이 있다.

Code: CPU에서 실행할 기계어 코드를 저장한다.
Data: 전역 변수 등 프로그램이 사용하는 데이터를 저장한다.
Stack: 함수가 호출될 때 호출된 함수의 수행을 마치고 복귀할 주소 및 데이터를 임시로 저장한다.

그 다음 가상 메모리에서 물리적인 메모리로 프로그램이 올라가는데, 메모리 낭비를 방지하기 위해 프로그램 중 당장 실행에 필요한 부분만 올라가고, 그렇지 않은 부분은 디스크 중 메모리의 연장 공간으로 사용되는 스왑 영역에 내려 놓는다. 즉, 주소 공간을 쪼개서 어떤 부분은 메모리에 있고, 어떤 부분은 스왑 영역에 있게 된다.

커널 주소 공간의 내용

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

  • 사용자 정의 함수:
    자신의 프로그램에서 정의한 함수

  • 라이브러리 함수:
    자신의 프로그램에서 정의하지 않고 가져다 사용한 함수
    자신의 프로그램 실행 파일에 포함되어 있다.

=> 위의 두 개는 프로그램 내에서 실행됨, 유저 모드에서 동작

  • 커널 함수:
    운영 체제 프로그램의 함수
    커널 함수의 호출 = 시스템 콜
    당연하지만, 주소 점프를 할 수 없으므로 인터럽트 라인을 세팅하여 CPU에게 제어권을 넘겨야 한다.
    => 시스템 콜, 커널 모드에서 동작

참고

https://steady-coding.tistory.com/513#google_vignette

profile
성장하는 중!

0개의 댓글