임베디드/[ Embedded ]

[ Embedded ] 01. 메모리와 프로세스에 관하여

kim.svadoz 2020. 8. 12. 14:47
728x90
반응형

메모리


  1. RAM
    • 컴퓨터를 종료하면 데이터가 날아가는 휘발성 메모리
    • 하드 디스크나 CD와는 달리 속도가 매우 빠르다.(데이터에 랜덤하게 접근할 수 있음)
    • 컴퓨터는 대부분의 데이터들은 메모리에 보관해 놓고 작업을 한다. 틈틈이 하드디스크에 저장!
  2. ROM
    • 컴퓨터를 종료해도 데이터가 날아가지 않는 비휘발성 메모리
    • ex) CD-ROM, DVD-ROM, 하드디스크 => (데이터에 순차적으로 접근한다)

컴퓨터의 한 개의 메모리 소자는 0 혹은 1의 값을 보관할 수 있다. 이 이진수 한 자리를 가리켜 비트(Bit)라고 한다. 따라서, 1개의 비트는 0 또는 1의 값을 보관할 수 있다. 8bit = 1byte

8bit(1byte)로 나타낼 수 있는 최대의 수는 0 ~ 0xFF. 0부터 255로 총 256개의 수를 나타내게 된다.

컴퓨터에서 연산을 담당하는 CPU에는 레지스터(register)라는 작은 메모리 공간이 있는데 이곳에다가 값을 불러다 놓고 연산을 수행하게 된다. 예를 들어 a+b를 하기 위해서는 a와 b의 값을 어디다 적어놓아야지, a+b를 할 수 있는 것처럼 CPU에서 연산을 수행하기 위해 잠시 써놓는 부분을 레지스터라고 한다.

이러한 레지스터의 크기는 컴퓨터 상에서 연산이 실행되는 최소 단위라고 볼 수 있고, 이 크기를 워드라고 부른다.

1워드는 64비트, 즉 8바이트가 된다.

프로세스(Process)


1. 프로세스란?

  • 프로세스(Process)란 실행중에 있는 프로그램(Program)을 말한다.
  • 스케쥴링의 대상이 되는 작업(task)와 같은 의미로 쓰인다.
  • 프로세스 내부에는 최소 하나의 스레드(thread)를 가지고 있는데, 실제로는 스레드단위로 스케쥴링을 한다.
  • 하드디스크에 있는 프로그램을 실행하면, 실행을 위해서 메모리할당이 이루어지고, 할당된 메모리 공간으로 바이너리 코드가 올라가게 되는데 이 순간부터 프로세스라 불린다.
  • 모든 프로세스는 각각 4G의 가상 주소공간(메모리공간X)을 부여받는다.
    • 운영체제 약 2G, 나머지 약 2G 응용프로그램의 고유 영역
    • 개발자는 이 가상주소공간 4G가 진짜 메모리인것 처럼 사용한다.
  • 가상주소공간(virtual addres space) != 가상 메모리(virtual memory)

2. 가상주소공간

가상주소공간의 구조

image-20200729135756106-1596589351106

  • Code 영역 : 프로그램을 실행시키는 실행 파일 내의 명령어들이 올라간다.
  • Data 영역 : 전역변수, static 변수의 할당
  • Heap 영역 : 프로그래머의 동적할당을 위한 메모리 영역
    • C언어 => malloc & free
    • C++ => new & delete
    • JAVA => new & Garbage Collector
  • Stack 영역 : 지역변수, 함수 호출시 전달되는 인자(파라미터)를 위한 메모리 영역
  • page : 가상주소공간 4G를 4096byte(4K) 단위로 나눈 하나의 메모리 블록을 page라고 한다.
  • 연산을 할 때는 값을 stack으로부터 레지스터로 가져오고 ALU로 넘겨서 연산을 수행한다. 연산 결과 값은 레지스터에 먼저 저장하고, stack영역에 재전달 한다.
  • 레지스터의 스택포인터(SP)는 stack 프레임을 위해서 미리 공간을 확보한다.

virtual machine

  • register based machine(연산결과를 레지스터에 저장)
  • virtual stack machine(연산결과를 stack에 저장하고 이를 다시 heap으로 반환)
  • 연산결과를 임시로 젖아하는 공간을 operand stack이라고 부른다.
  • 인터프린터 언어는 heap에 데이터를 저장하고 연산은 레지스터 ALU에서 실행 후 실행 결과를 stack에 저장. 해당값을 heap에 전달하려면 다시 레지스터를 거쳐야 한다.

stack vs heap

  • 가상주소공간 중 stack은 빠르고 heap은 상대적으로 느리다.
  • stack은 그냥 데이터를 쌓지만 heap은 도중에 del등을 통해서 지울 수 있다. 빈공간이 생기면 그 곳에 새로운 데이터가 추가 된다.(spacial locality 보장이 어렵다)
  • 또한, heap은 메타데이터 정보를 함께 저장한다. 따라서 더 많은 용량을 사용하며 할당시 매번 metadata에게 여분 공간이 있는지 묻기 때문에 상대적으로 느리다.
  • heap의 최대장점
    • 할당시점과 지우는 시점을 마음대로 저장할 수 있다.
    • 프로세스 도중에 용량을 변경할 수 있다.(stack의 경우 프로세스 실행 전에만 변경 가능하다. 용랑이 넘치는 경우 stack overflow가 발생한다.)

3. 가상메모리

  • 가상메모리 : 물리적인 RAM + 하드디스크
  • page frame : 가상메모리(물리메모리 = RAM+페이징파일)를 4096byte(4K) 단위로 나눈 후, 그 한단위를 페이지 프레임이라 한다.
  • 페이지 테이블 : 가상주소공간과 가상메모리를 매핑한다. 프로세스 별로 각각 하나씩 존재한다.
  • RAM의 프레임이 모두 차있을 때, 추가 요청이 들어오면 RAM에서는 교체 알고리즘에 따라서 프레임 하나를 페이징파일로 내리고, 새롭게 요청된 페이지에 비워진 프레임을 할당한다.
  • 가상메모리 운영방식 : LRU(least, recently, uses - 최근 최소 사용). 필요한것만 RAM으로 가져오고 안쓰는건 하드디스크에 내려놓는다.

4. 프로세스 스케쥴링

  • CPU는 하나인데 동시에 실행되어야 할 프로세스가 여러개??

    => CPU가 고속으로 여러 프로세스를 일정한 기준으로 순서를 정해서 실행한다.

  • 스케쥴링(Scheduling)

    • CPU 할당 순서 및 방법을 결정하는 일.(어떤 프로세스를 running으로 보낼까?)
    • 일정한 기준 : 스케쥴링 알고리즘을 통해서.

대부분의 OS에서는 우선순위(Priority algorithm) 알고리즘라운드 로빈(Round Robin) 알고리즘을 혼합해서 스케쥴링

5. 프로세스 상태변화

image-20200729141825350-1596589351107

프로세스의 상태는 ready(준비), blocked(대기), running(실행) 상태가 있다.

  • 생성(new) -> 준비(ready)

    => new 상태에서 프로세스가 생성되게 되면 OS 커널에 존재하는 Ready Queue에 올라가게 된다.

  • 준비(ready) -> 실행(running)

    => Ready Queue에 있는 프로세스들을 OS가 위에서 말한 프로세스 스케쥴링 알고리즘에 의해서 Running 상태로 가야할 프로세스를 CPU로 할당하게 된다. 그러면 프로세스는 실행(Running)상태가 된다.

  • 실행(running) -> 준비(ready)

    => 현재 running 상태에 있는 프로세스A보다 Ready Queue에서 대기하고 있는 프로세스 B 우선순위가 높으면, preemptive schedule(선점형)인 경우 프로세스A는 ready상태로 오게되고 프로세스B가 running상태로 가서 CPU를 할당받는다.

  • 실행(running) -> 대기(blocked)

    => 현재 running 상태에 있는 프로세스A에서 입출력(I/O) 이벤트가 발생했을 때 프로세스A가 blocked상태로 가게된다.

  • 대기(blocked) -> 준비(ready)

    => 입출력(I/O) 이벤트가 종료된 프로세스는 다시 Ready상태로 오게된다.

  • 실행(running) -> terminate(종료)

    => 프로세스 종료

ready, blocked 상태에는 여러 프로세스가 존재할 수 있다.

하지만, 싱글코어CPU에서, running상태의 프로세스는 단 하나만 존재한다.

728x90
반응형