[운영체제] 4. System Structure & Program Execution 2

이건회·2022년 3월 11일
0

운영체제

목록 보기
3/27
post-thumbnail

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

  • 동기식 입출력 : i/o 요청 후 실제로 무언가가 입출력 된 것을 확인하고 나서야 사용자 프로그램에 넘어가 그 다음 과정을 실행하는 것.
  • i/o 가 끝날 때까지 cpu를 낭비시키는 방법을 쓰면 매 시점 i/o를 하나만 할 수 밖에 없다. 따라서 낭비가 발생한다.
  • 따라서 i/o가 완료될 때까지 해당 프로그램의 cpu를 빼앗고 다른 프로세서에게 cpu를 넘겨 각 프로그램이 i/o처리를 기다리도록 줄을 세워 cpu가 놀지 않고 일하도록 구현을 한다.
  • 비동기식 입출력 : i/o 요청 후 실제 입출력 작업이 끝나기도 전에 제어가 사용자 프로그램으로 넘어가 다음 작업 수행
  • i/o가 끝나면 두 경우 모두 인터럽트를 보내 종료되었음을 알려준다.

  • 위는 동기/비동기를 설명한 그림이다.
  • 동기식 입출력은 i/o 요청을 운영체제에 하게 되면 i/o 작업이 끝난 후 다시 사용자에게 돌아온 것을 보고서 다음 작업을 한다.(결과를 보고 프로그램을 짬, 읽어오는 데이터를 가져와야지만 다음 작업을 수행할 수 있는 일을 하는 경우 사용)
  • 비동기식 입출력은 i/o 작업을 요청만 해놓고 진행 중에 다시 처음에서 CPU 제어권을 얻어 다른 작업을 한다.(읽어온 데이터와 상관없는 작업을 하는 경우 사용)

  • DMA는 메모리를 접근할 수 있는 장치다. i/o 요청이 많이 들어오면 인터럽트가 잦아 cpu가 효율적인 동작을 못하므로 dma controller가 메모리에 직접 접근할 수 있어 cpu의 역할을 대신 수행하고, 모든 작업이 끝나면 cpu에 한 번 인터럽트를 보내 요청한 작업이 메모리까지 올라 왔음을 알린다.
  • 빠른 입출력 장치의 경우 인터럽트가 더 잦으므로 dma를 사용한다.

  • i/o를 수행하는 지시가 두 가지 있다.
  • 메모리에 접근하는 주소를 참고한 지시와 i/o 디바이스를 접근하는 주소를 참고한 지시가 합쳐진 것이 있고, i/o 디바이스에 메모리 주소를 먹여 메모리 접근 지시를 통해 i/o를 할 수 있다.

  • 다음은 저장장치의 계층 구조다. 그림에는 없지만 맨 위에는 cpu가 있는 것이다. 레지스러, 캐시 메모리, 메인 메모리가 프라이머리 스토리지고, 마그네틱 디스크, 옵티컬 디스크, 마그네틱 테이프가 세컨 스토리지다.
  • 특징은 위로 갈수록 속도가 빠른매체를 사용하고, 위로 갈 수록 단위공간당 가격이 비싸므로 용량이 적다. 또 위로 갈 수록 휘발성이 크다. 위로 갈 수록 전원이 나가면 메모리가 사라질 위험이 크다는 것이다. 따라서 윗단은 휘발성, 아랫단은 비휘발성이다.
  • CPU에서 직접 접근 가능한 스토리지가 프라이머리 스토리지이며, 실행 가능하다라는 뜻의 Excutable 이라 부른다. CPU가 직접 접근하려면 바이트 단위로 접근이 가능한 매체여야 한다.
  • 반대로 직접 접근하지 못하면 세컨 스토리지라 부른다.
  • 레지스터와 메인 메모리간 속도 차이가 있기 때문에 그 차이를 완충하기 위해 중간에 캐시 메모리가 존재한다.
  • 캐시 메모리는 메인메모리보다 용량이 작아 모든 것을 담지 못하므로 필요한 것만 담아 놓는다. 재사용이 목적이다.

  • 프로그램은 어떻게 컴퓨터에서 실행될까.
  • 개괄적으로는 프로그램이 저장된 실행파일이 메모리로 올라가 프로세스가 되어 실행된다.

  • 실행파일이 메모리로 올라가기 전에 한 단계를 거치게 되는데 이것이 버츄얼(가상) 메모리다. 프로그램을 실행시키면 그 프로그램 만의 독자적인 커널 주소 공간이 형성된다. 이 커널 주소 공간은 코드, 데이터, 스택으로 구성된다.

  • 생성한 주소공간은 메모리에 바로 연속적으로 올라가는 것이 아니다. 메모리 낭비 방지를 위해 당장 필요한 부분만 물리적 메모리에 올려 쓰고, 사용되지 않으면 쫓아내는 구조이다. 사용하지 않는 메모리는 스왑 에리어라는 곳에 놓는다.
  • 스왑 에리어 하드웨어는 전원이 나가면 의미 없는 정보가 된다. 메모리의 연장선으로 활용하기 때문에 휘발성이 크고, 파일 시스템 하드웨어는 전원이 나가도 내용이 유지되는 비휘발성 용도로 사용한다.
  • 물리적 메모리의 주소는 프로그램에 명시된 메모리 주소와 다르다. 따라서 프로세스가 메모리에 올라오면 주소가 바뀌므로 메모리 주소변환을 해주어야 한다.

  • 커널 주소 공간의 구조다. 코드, 데이터, 스택으로 구성되어 있다.
  • 커널에 있는 코드는 운영체제의 자원 효율적 관리 코드, 사용자에게 편리한 인터페이스 제공 코드, 시스템콜과 인터럽트 처리 코드가 있다.
  • 커널의 데이터 영역에는 운영체제가 사용하는 자료구조들이 적혀 있다. 운영체제는 cpu, 메모리, 디스크등의 하드웨어를 관리 및 통제한다. 하드웨어 관리를 위해 종류마다 자료구조를 만들어 관리하는 것이다. 또 운영체제는 프로세스를 관리 하므로 각 프로그램의 독자적 주소공간을 관리하기 위한 자료구조가 필요한데 이를 PCB라고 부른다.
  • 운영체제가 함수 구조로 코드가 짜여 있으므로 함수를 호출 및 리턴할때 스택을 사용해야 한다. 운영체제의 코드는 사용자 프로그램의 요청에 따라 쓸 수 있다. 따라서 커널 스택은 어떤 사용자 프로그램이 코드를 실행중인가에 따라 커널 스택을 별도로 둔다.

  • 모든 프로그램은 함수 구조로 짜여 있다.
  • 함수에는 사용자가 자신의 프로그램에서 직접 작성한 사용자 정의 함수가 있고, 실행 파일에 포함되어 프로그램에서 갖다 쓰는 라이브러리 함수, 운영체제 안에서 정의된 커널 함수가 있다. 커널 함수는 시스템 콜을 통해 호출한다.

  • A라는 프로그램이 시작되어 종료될 때 까지의 모습이다.

  • 프로그램이 직접 CPU를 잡고 있으면 유저 모드이다.
  • 시스템 콜을 하게 되면 커널 모드에서 cpu가 동작한다.
  • 동작이 끝나면 다시 A에게 CPU가 넘어오고 본인 주소공간의 코드를 실행한다.
  • 다시 시스템 콜이 오면 다시 커널 모드에서 cpu가 동작하는 모습을 반복하는 모습을 보인다.
  • 이를 반복하다가 끝나는 지점에 다다르면 프로그램이 종료된다.
profile
하마드

0개의 댓글