System Structure & Program Execution 2

ChoiYongHyeun·2023년 11월 23일
0

운영체제

목록 보기
3/16

강의링크

컴퓨터 시스템 구조 회고

CPUmemory 에 담긴 instruction 을 시행한다.

이 때 CPU 에는 memory 에 담긴 instruction 을 가리키는 programm counter 라는 register 가 존재한다.

해당 명령이 시행 된 이후에 programm counter 는 주소를 다음 instruction 의 실행 주소를 가리킨다.

대부분 memory에 담긴 insruction4byte 이기 때문에 명령이 실행되면 programm counter 의 주소를 += 4byte

대부분 instruction 을 순차적으로 진행하지만 만약 프로그램 내에서 함수 가 존재할 경우 다양한 곳에 있는 instruction 을 실행하기도 한다.

CPUinstruction 을 실행하고 interrupt lineinterrupt가 존재하는지 확인하고 이동한다.

interrupt line 별로 실행해야 하는 함수가 존재하며 이를 ISR , interrupt Service Routine 이 존재하며 그런 함수들을 interrupt vector 들이 가리키고 있음

mode bitCPUOS 에 있어서 모든 명령을 실행 할 수 있는지, 프로그램에 있어서 제한된 명령만을 실행할 수 있는지를 구분 짓는 값이다. (0 : OS , 1: 사용자 프로그램)

mode bit0 일 때만 I/O device 만 접근 할 수 있다. 그렇기 때문에 프로그램I/O device 에 접근하기 위해서는 mode bit 이 0일때에만 가능, 이는 CPU 가 OS 에 할당되어 있어야 한다.

그렇기 때문에 프로그램 에서 I/O device에 접근하기 위해선 interrupt lineinterrupt 를 보내는 system call 을 보내고 OSI/O device에 접근한다.

Interrupt 종류

Interrupt : 하드웨어가 발생시킨 인터럽트 (ex : I/O device)
Trap : 소프트웨어가 발생시킨 인터럽트
- Exception : 프로그램의 오류로 인해 발생한 인터럽트
- System call : 프로그램이 I/O device 에 접근하기 위한 인터럽트

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

동기식 입출력

  • I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에게 넘어감
    - I/O 요청이 끝날 때 까지 (인터럽트가 올 때 까지) 요청을 보낸 프로그램은 실행이 멈춰있음
  • I/O 도 하나가 실행 후 완료되어야 다른 I/O 작업을 하기 때문에 한 번에 하나의 I/O 만 실행이 가능하다는 단점이 있다.
  • CPU 가 낭비되기 때문에 기다리고 있는 프로그램을 제외하고 다른 프로그램을 실행하는 방법이 있다.
    - 이렇게 하면 서로 다른 프로그램들의 I/O 도 동시에 실행 할 수 있다.

비동기식 입출력

  • I/O 요청 후 작업이 끝나기 전까지 요청과 상관 없이 작업을 실행하고 있음
  • 이후 요청이 끝나면 interrupt 가 들어오면 해당 작업을 시행함

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

DMA (Direct memory Access)

정의

I/O device 의 작은 일들이 있을 때 마다 CPUinterrupt 를 주는 것은 너무 비효율적이기 때문에 메모리에 직접적으로 접근 할 수 있는 장치

DMA로 직접적으로 memory 에 접근한 이후 작업이 완료 되었음을 CPU 에 알려주면서 Interrupt 를 한 번 건다.

서로 다른 입출력 명령어

일반적인 I/O

CPU 는 메모리에 접근하는 instruction 이 있고 (roadster) I/O device 에 접근하는 instruction 이 존재한다.

Memory mapped I/O

I/O 장치도 memory 에 연장주소로 붙인 후 I/O 에 접근 할 수 있는 instruction 도 실행한다.

ex : memory 에 0~100번까지는 memory 에 접근하는 instruction 아면 1000번 이후의 instructionI/O에 접근 하도록 함

저장 장치의 계층 구조

  • 위로 갈 수록 속도가 빠른 매체를 사용한다.
  • 단위 공간단 가격이 비싸기 때문에 용량이 적다.
  • 위로 갈 수록 휘발성 매체이며 아래로 갈 수록 비휘발성 매체이다.

    전원이 꺼진다고해서 HDD 의 내용이 사라지지 않지만 메모리에 담긴 내용은 휘발된다.

  • primaryCPU 가 직접적으로 접근 가능하며 secondray 에는 접근이 불가능하다. (excutable 하냐 못하냐)
    -CPU 에서 접근이 가능하려면 byte 단위로 접근 할 수 있어야 한다.
    - primary 에는 몇 클럭 안에 가능하며 secondary 는 적게는 몇 십, 많게는 몇 백 클럭만에 접근 가능하다.
    - 이를 해결하기 위해 cache memory 가 존재한다.

    Caching

    빠른 매체로 정보를 읽어들여서 쓰는 것을 Caching 이라고 한다.
    Caching 은 재사용을 위해 사용한다.
    이미 읽어온 데이터를 Cache memory 에 저장해두고 또 느리게 읽어올 필요 없이 Cache memory 에서 빠르게 읽어온다.

    프로그램의 실행 (memory load)

대부분의 프로그램은 file system 형태로 실행 파일이 존재하고 물리적인 메모리에 담겨 process 가 된다.

물리적인 메모리에 담기기 전 가상 메모리 에 담기게 된다.

가상 메모리 (Virtual memory)

가상 메모리의 메모리 주소공간 (address space) 안에 프로그램 별 독자적인 메모리 주소가 담긴다.

가상 메모리에 주소가 담길 때 stack , data ,code 형태가 담긴다.

  • code : 프로그램을 실행 할 code
  • data : 프로그램에서 사용하는 자료구조들이 담긴다.
  • stack : 코드가 함수구조로 되어있기 때문에 함수를 호출하거나 리턴 할 때 데이터를 담을 자료구조

커널의 주소 공간은 물리적인 메모리에 항상 존재한다.

효율적인 메모리 관리를 위해서 물리적인 메모리에 주소 메모리를 모두 올려두는게 아니다.

내가 실행하고자 하는 코드의 주소만을 메모리에 올려두고, 사용 한 이후에는 메모리에서 쫒아낸다.

실행하고자 하지 않는 주소 공간swap area 라고 불리는 HDD 에 담아둔다.

File SystemSwap area 의 차이

File System 은 프로그램에 대한 정보를 비휘발적으로 영구적으로 저장
Swap area 는 물리적인 메모리의 효율적인 관리를 위하여 가상 메모리의 정보들을 담아둔다.

메모리 주소 변환 (Address tranlation)

물리적인 메모리도 0번지부터 시작하는 주소이다.

가상 메모리의 주소는 다른 번지에 존재하는데 물리적인 메모리에 들어갈 때는 물리적인 메모리에 맞게 주소를 맞춰서 들어가야 한다.

이러한 주소를 변환해주는 계층이 존재하는데 이런 계층을 주소 변환 계층이라고 한다.

이건 하드웨어가 기능하며 이건 추후에 한다.

커널(OS) 주소 공간의 내용

code

  • 자원을 효율적으로 관리하기 위한 코드가 존재한다. (시스템콜, 인터럽트)
  • 사용자가 편리하게 프로그램을 운영하기 위한 코드가 존재한다.

data

운영체제가 사용하는 여러 자료구조들이 정의되어 있다.

하드웨어들을 직접 관리하기 위해 하드웨어 종류 별로 자료구조를 만들어서 관리 한다.

소프트웨어인 프로세스 들을 관리하기 위한 자료구조도 담아둔다.

어떤 프로그램이 CPU를 얼마나 쓰는지, 어떤 프로그램에 CPU 를 할당 할 것인지를 결정하기 위해 PCB (process control block) 형태의 자료구조로 관리한다.

Stack

OS 도 함수로 이뤄져있기 때문에 프로세스 들의 함수에 따른 관리를 위해 프로세스 별 커널 스택이 존재한다.

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

우리가 사용하는 모든 프로그램은 함수로 이뤄져있다.

어떤 프로그램이 되든 compile 이후 함수로 이뤄진다.

  • 사용자 정의 함수 : 내가 직접 정의한 함수
  • 라이브러리 함수 : 누군가가 이미 만들어뒀으며 유용하여 사용하는 함수

    어떤 함수든 complie 된 프로세스의 code 에 존재한다.

  • 커널 함수 : 운영 체제 프로그램의 함수
    - 내 프로그램 내부 함수가 아니라 커널 에서 정의된 함수이다.
    • 커널 함수 를 호출하기 위해선 프로세스 가상메모리 가 아니라 커널 가상 메모리 에서 호출하여 사용해야 한다.

      프로세스에서 커널 함수를 이용하기 위해서는 system call을 이용하여 OS 에 접근해야 한다.

프로그램의 실행

위 이미지는 A 라는 프로세스가 실행되는 과정을 보인것이다.

첫 번째 단계에서는 사용자 정의 함수 or 라이브러리 함수 를 호출하는 단계이다.

user mode : CPU 가 사용자 정의 프로그램을 사용하고 있는 동안을 user mode 라고 한다.

두 번째 단계는 A 에서 커널 함수 를 실행했을 경우이다. 커널 함수 에 접근하기 위해선 system call 이후 커널 모드에 들어가 커널에 접근해야 한다.

profile
빨리 가는 유일한 방법은 제대로 가는 것이다

0개의 댓글

관련 채용 정보