[운영체제] 컴퓨터 구조와 프로그램의 실행

장현수·2023년 5월 30일
0

운영체제

목록 보기
2/11

아래는 강의를 들으며 정리한 내용이고, 모든 내용은 발표자료에 담았다.
따라서 발표자료를 먼저 첨부할 것
https://www.miricanvas.com/v/123negp

컴퓨터 시스템의 구조

  • 메모리 = CPU의 작업공간

  • 하드디스크 : 보조기억장치. I/O device 로 볼 수 있음. 데이터를 메모리로 읽어들이기도, 처리 결과를 파일 데이터로 저장하기도 함

  • device controller : 각 입출력 장치에 붙어있는 작은 CPU같은 장치. 각 장치를 전담한다.

이들도 각각의 작업 공간이 존재한다. = local buffer

CPU 내부

  • register : 메모리보다 빠르면서 정보를 저장할 수 있는 작은 공간

  • mode bit : CPU에서 실행중인 것이 운영체제인지 사용자 프로그램인지 구분해주는 것

  • interrupt line : 항상 메모리하고만 일하는 CPU에게 입출력 장치의 입력 또는 화면에 출력 또는 디스크 등등 → 메모리 이외에서 일어나는 작업들을 수행하기 위해

  • timer : 특정 프로그램이 CPU를 독점하는 것을 막는 역할. 프로그램 실행 시 timer에 값을 입력하고 CPU로 넘어감. 세팅된 시간동안 실행하다가 시간이 다 되면 timer가 CPU에 interrupt를 걺. CPU는 인스트럭션 실행 끝나면 interrupt line을 체크함. 들어온 게 있으면 하던 일 멈추고 CPU의 제어권이 사용자 프로그램에서 운영체제로 넘어감.

사용자 프로그램은 입출력 장치에 직접 접근할 수 없음. 입출력 작업은 반드시 운영체제를 통해서 해야 함. 사용자 프로그램에서 입출력 작업이 필요한 경우 CPU 제어권을 OS에 넘기고 CPU에서 키보드 입력을 받고, I/O controller가 요청받은 작업이 끝나면 자신의 local buffer에 들어온 CPU에 interrupt를 걺. OS는 interrupt를 확인하고 사용자 프로그램에 CPU 제어권을 넘겨 줌.

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

동기식 입출력 synchronous I/O

입출력 장치까지 가서 직접 보고 오는 것

입출력 작업이 완료되어야만 제어가 사용자 프로그램에 넘어감

  • 구현 방법1
    • I/O가 끝날때까지 CPU를 낭비시킴
    • 매 순간 하나의 I/O만 일어날 수 있음 → CPU 뿐 아니라 I/O장치도 낭비됨
  • 구현 방법2 → CPU 뿐 아니라 I/O장치도 여럿이 동시에 실행될 수 있음
    • I/O가 완료될 때까지 해당 프로그램에서 CPU를 빼앗음
    • I/O처리를 기다리는 줄에 그 프로그램을 줄 세움
    • 다른 프로그램에 CPU를 줌

비동기식 입출력 asynchronous I/O

여러 장치가 연결되어있어서 직접 결과를 확인하지 않고 다음 일을 처리하는 것

입출력 요청만 해놓고 결과를 확인하지 않고 CPU제어권을 얻어서 바로 다음 일을 처리함

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

DMA (Direct Memory Access)

작은 입출력 작업 하나하나에 인터럽트가 걸리면 CPU의 오버헤드 증가

로컬 버퍼에 일정량이 쌓이면 한번에 인터럽트를 걸어서 CPU의 인터럽트 빈도를 줄요 효율성을 증가시킴

저장장치 계층 구조

위로 갈수록 용량이 적음(가격이 비싸서), 속도가 빠름

연두색 - 휘발성

분홍색 - 비휘발성

Primary : CPU가 직접 접근 가능 → Byte단위로 접근 가능

Secomdary : CPU가 직접 접근 불가 → Sector단위 접근

Caching : 재사용이 목적. 이미 읽어온 데이터가 있으면 속도가 빠른 윗단에서 읽어오는 것

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

파일 시스템에서 가상 메모리에 올라갔다가 실제 물리 메모리에 올라가 프로세스 실행

가상 메모리에서 그 프로그램의 독자적인 공간인 주소 공간 Address space가 만들어짐.

주소 공간은 각 프로그램마다 만들어지고, code, data, stack으로 구성 됨.

주소공간을 통째로 메모리에 올리면 메모리 낭비가 되기 때문에 당장 필요한 것만 메모리에 올린다.

그렇지 않은 부분은 disk의 swap area에 내려놓는다.

File system 용도의 하드디스크 - 종료되어도 내용이 사라지지 않음. 비 휘발성 용도로 사용

Swap area는 메모리 용량의 한계 때문에 추가적으로 사용됨.

  1. 실행파일(프로그램) 실행
  2. 곧바로 물리 메모리에 올라가는 것이 아닌 가상메모리를 거침
  3. 프로그램을 실행시키면 실행시킨 프로그램의 주소공간(address space)이 생성됨. -> 모든 프로그램은 독자적인 주소공간이 만들어짐(가상 메모리). 이 주소공간은 코드, 데이터, 스택으로 나뉨
  4. 이 주소공간이 물리적 메모리에 올라가서 수행되는 것. 프로그램을 실행시키면 주소공간 생성, 종료시키면 사라짐

이 주소공간을 물리적 메모리에 다 올리는 것이 아님(메모리 낭비) 당장 필요한 부분만 올림. 그렇지 안은 부분은 디스크의 swap area에 내려놓음

커널 주소공간의 내용

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

사용자 정의 함수

  • 자신의 프로그램에서 정의한 함수
  • 내가 직접 작성한 함수를 내가 불러와 쓰는 것

라이브러리 함수

  • 자신의 프로그램에서 정의하지 않고 갖다 쓴 함수
  • 자신의 프로그램의 실행 파일에 포함되어있다

→ 사용자 정의, 라이브러리 모두 실행 파일 안에 함수들이 포함되어 있음.

커널 함수

  • 운영체제 프로그램의 함수
  • 커널 함수의 호출 = 시스템 콜

→ 내 프로그램 안에 들어있는 게 아니라 커널 안에 들어있는 함수. 프로그램에 정의되어있지 않음. 호출만

프로그램의 실행 단계

지금까지 공부한 내용을 바탕으로 이 그림을 이해하고 설명할 수 있다면 ok

profile
개같이 발전하자 개발

0개의 댓글