프로세스

1. 프로세스의 개념

Untitled

  • 프로세스의 문맥 : 프로세스의 현재 상태를 나타내는데 필요한 모든 요소
    • CPU 수행 상태를 나타내는 하드웨어 문맥 - Program Counter, 각종 register
    • 프로세스의 주소 공간 : code, data,stack
    • 프로세스 관련 커널 자료 구조 : PCB(Process Control Block), Kernel stack
  • 프로세스가 번갈아가며 실행되기 때문에 다음번 CPU를 점유했을 때 작업을 이어서 실행하기 위해서는 프로세스 문맥이 필요하다

프로세스의 상태

Untitled

프로세스는 상태가 변경되며 수행된다.

  • Running : CPU를 잡고 instruction을 수행중인 상태
  • Ready : 메모리 등 다른 조건을 만족하고 CPU를 기다리는 상태
  • Blocked(wait, sleep) : CPU를 주어도 당장 instruction을 수행할 수 없는 상태, Process 자신이 요청한 event(I/O)가 즉시 만족되지 않아 이를 기다리를 상태 ex) 디스크에서 file을 읽어와야 하는 경우
  • New : 프로세스가 생성중인 상태
  • Terminated : 수행이 끝난 상태

Untitled

하나의 프로세스만 CPU에서 수행됨. timer interrupt가 들어오면 다음 프로세스가 CPU 점유.

Queue!!

Process Control Block(PCB)

운영체제가 각 프로세스를 관리하기 위해 프로세스 당 유지하는 정보.

Untitled

1) OS가 관리상 사용하는 정보

  • Process state, Process ID
  • schekduling information, priority

2) CPU 수행 관련 하드웨어 값

  • Program counter, registers

3) 메모리 관련

  • code, stack, data의 위치정보

4) 파일 관련

  • open file descriptors

문맥 교환(Context Switch)

  • CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
  • CPU가 다른 프로세스에게 넘어갈 때 운영체제는 다음을 수행한다
    • CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
    • CPU를 새롭게 얻는 프로세스의 PCB를 읽어옴

Untitled

  • system call이나 interrupt 발생시 반드시 context switch가 일어나는 것은 아니다

Untitled

사용자 프로세스 간에 CPU가 넘어갈 때 context switch가 일어남.

system call이나 interrupt가 발생하면 운영체제로 CPU로 넘어감 → 이건 context switch가 아님!

2. 프로세스 스케줄링

프로세스를 스케줄링하기 위한 큐

프로세스들은 각 큐들을 오가며 수행된다.

  • Job Queue : 현재 시스템 내에 있는 모든 프로세스의 집합
  • Ready Queue : 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합
  • Device Queues : I/O device의 처리를 기다리는 프로세스의 집합

스케줄러

  • CPU scheduler=Short-term scheduler : 프로세스에 CPU를 주는 문제, 어떤 프로세스를 다음번에 running 시킬지 결정,충분히 빨라야함
  • Job scheduler = Long-term scheduler : 프로세스에 메모리를 주는 문제, 프로세스시작(new)→ 메모리에 올라가면 ready 상태가 됨, 시작 프로세스 중 어떤 것들을 ready queue(메모리)로 보낼지 결정, degree of Multiprogramming(메모리에 올라가는 프로세스 수)을 제어. time sharing system에는 보통 장기 스케줄러가 없고 무조건 ready 상태임.
  • Swapper = Medium-term Scheduler : 요즘 시스템은 프로그램이 시작되자마자 메모리를 줌. 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄, 프로세스에게서 memory를 뺏는 문제, degree of Multiprogramming을 제어 → 프로세스를 Suspended 상태로 만듦!!!

Untitled

3. Thread 쓰레드

프로세스 내부의 CPU 수행단위. 프로세스하나에서 공유할 수 있는 건 최대한 공유(PCB, 메모리의 data,code), 별로도

Untitled

Untitled

  • 다중 스레드로 구성된 태스크 구조에서는 하나의 서버 스레드가 blocked 상태인 동안에도 동일한 태스크 내의다른 스레드가 실행(running)되어 빠른 처리를 할 수 있다.
  • 동일한 일을 수행하는 다중 스레드가 협력하여 높은 처리율과 성능 향상을 얻을 수 있다.
  • 스레드를 사용하면 병렬성을 높일 수 있다.

Thread의 구성

  • program counter
  • register set
  • stackspace

Thread가 동료 thread와 공유하는 부분(=task)

  • code section
  • data section
  • OS resources

스레드의 장점

  • 응답성 : 스레드를 여러개 가지고 있으면 하나의 스레드가 blocked 상태일 때 (예 - 네트워크 통신) 다른 스레드가 동작한다(예 - 화면 보여주기)
  • 자원 공유 : 같은 일을 하는 프로그램이 여러 개 있을 때 여러 프로세스를 쓰는 것보다는 하나의 프로세스를 만들고 CPU 수행단위를 여러개를 만들어 code, data, 프로세스 resource를 공유하면 자원을 더 효율적으로 사용할 수 있다.
  • 경제성 : 스레드의 create & CPU swithing이 프로세스의 그것보다 오버헤드가 적음
    프로세스를 하나 만드는 것이 프로세스 내부에서 스레드를 만드는 것 보다 오버헤드가 더 큼, 문맥교환(프로세스 간 cpu 점유 이동) 프로세스 내부에서 스레드 내 CPU swithing이 context switch보다 오버헤드가 작음

스레드 구현 방법

  • Kernerl Thread : kernel 방식 - 스레드가 여러개 있다는 사실을 운영체제 커널이 알고 있다. 스레드를 넘길 때 커널이 관여한다
  • User Thread : library 방식 - 운영체제는 스레드가 여러개라는 걸 모르고, 사용자 프로그램이 자체적으로 스레드를 관리함.

4. 프로세스 관리

프로세스 생성

  • 부모 프로세스(Parent process)가 자식 프로세스(children process) 생성 - 복제
    • Copy on Write(COW) : 효율적인 운영ㅊ제에서는 PCB 정도만 복제하고, 우선 자원을 공유한다. 내용이 바뀔 때만 복제를 함.
  • 프로세스의 트리(계층 구조) 형성
  • 프로세스가 실행되려면 자원(cpu, memory,..)이 필요하다
    • 운영 체제로부터 받는다
    • 부모와 공유한다
  • 주소 공간(Address space)
    • 자식은 부모의 공간을 복사함(binarhy and OS data - PCB,자원,..) - ex) unix fork()
    • 자식은 그 공간에 새로운 프로그램을 올림 ex] exec() 시스템 콜을 통해 새로운 프로그램을 메모리에 올림

프로세스 종료

  • 프로세스가 마지막 명령을 수행한 후 운영체제에게 이를 알려줌 ex] exit() system call - 자발적
    • 자식이 부모에게 output data를 보냄 ex] wait()
    • 프로세스의 각종 자원들이 운영체제에게 반납됨
  • 강제 종료 : 부모 프로세스가 자식의 수행을 종료시킴 ex] abort()
    • 자식이 할당 자원의 한계치를 넘어섬
    • 자식에게 할당된 태스크가 더 이상 필요하지 않음
    • 부모가 exit 하는 경우
      • 운영체제는 부모 프로세스가 종료하는 경우 자식이 더 이상 수햏ㅇ되도록 두지 않는다
      • 단계적인 종료

프로세스 관련 시스템 콜 정리

  • fork() : 프로세스 복제
  • exec() : 새로운 프로그램으로 덮어씌움.
  • wait() :
  • exit() : 자발적 프로세스 종료

프로세스 간 협력 - IPC(Interprocess Communication)

  • 독립적 프로세스 : 프로세스는 각자의 주소 공간을 가지고 수행되므로 원칙적으로 하나의 프로세스는 다른 프로세스의 수행에 영향을 미치지 못함

  • 협력 프로세스 : 프로세스 협력 메커니즘을 톨ㅇ해 하나의 프로세스가 다른 프로세스의 수행에 영향을 미칠 수 있음

  • 프로세스 간 협력 메커니즘 (IPC : Interprocess Communication)

    Untitled

    • message passing : 메시지를 전달하는 방법, 커널을 통해, 프로세스 사이에 공유 변수를 사용하지 않고 통신하는 시스템

      Untitled

      • Direct Communication : 통신하려는 프로세스의 이름을 명시적으로 표시
      • Indirect Communication : mailbox(또는 port)를 통해 메시지를 간접 전달
    • shared memory : 주소 공간을 공유하는 방법. 서로 다른 프로세스 간에도 일부 주소 공간을 공유하게 하는 shared memory 메커니즘이 있다.

  • 스레드는 사실상 하나의 프로세스이므로 프로세스 간 협력으로 보기는 어렵지만 동일한 프로세스를 구성하는 스레드들간에는 주소 공간을 공유하므로 협력이 가능

'CS > 운영체제' 카테고리의 다른 글

컴퓨터 시스템의 구조  (0) 2022.03.15
컴퓨터 내부의 언어체계  (0) 2022.01.18

Untitled

CPU

  • 메모리에 올라와있는 기계어를 처리
  • instruction set - 기계어 정의 집합, 보통 4byte, 0과 1의 조합
  • PC(Program counter)라는 레지스터가 가리키고 있는 메모리 주소를 실행시킴
  • CPU에서 instruction을 실행하면, 다음 위치의 메모리 주소가 PC에 올라옴.
  • 기본적으로는 순차적으로 프로그램을 실행
  • if, 반복문 등을 실행할 때는 memory jump를 함. jump instruction이 있음.

Interrupt

  • 인터럽트 다한 시점의 레지스터와 program counter를 save한 후 CPU의 제어를 인터럽트 처리 루틴에 넘긴다
  • 인터럽트 종류
    • Interrupt (하드웨어 인터럽트) : 하드웨어가 발생시킨 인터럽트, 디바이스 controller가 발생시킨 인터럽트. 일반적인 인터럽드라하면 하드웨어 인터럽트임
    • Trap(소프트웨어 인터럽트)
      • Exception : 프로그램이 오류를 범한 경우
      • System call : 프로그램이 커널 함수를 호출하는 경우
  • 인터럽트 종류마다 실행해야 할 함수가 미리 정의되어 있다.
  • 인터럽트 벡터 : 인터럽트 주소와 처리 루틴 주소를 가지고 있음
  • 인터럽트 처리 루틴(Interrupt Service Routine) : 해당 인터럽트를 처리하는 커널 함수

System call

  • 사용자 프로그램이 운영체제에게 I/O 작업을 해야할 때 system call을 이용해 요청함
  • CPU의 제어권이 사용자 프로그램에서 OS로 넘어감

Timer

  • timer가 인터럽트를 가지고 있음
  • OS가 사용자 프로그램으로 제어권을 넘겨줄 때 mode bit을 1로 바꿔서 넘겨줌
  • 사용자 프로그램이 CPU를 계속 사용할 때(ex- 무한루프) 타이머에 시간셋팅을 해 할당된 시간이 끝나면 타이머가 CPU에게 인터럽트를 걸어 제어권을 다시 OS에게 넘겨줌

I/O

  • device controller
  • local buffer : IO 디바이스의 데이터를 저장
  • CPU에 정보를 전달할 때 interrupt를 걸어서 이용해 호출

Untitled

동기식 입출력(Synchronous I/O)

  • I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램으로 넘어감

비동기식 입출력(Asynchronous I/O)

  • I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감
  • 두 경우 모두 I/O 완료는 인터럽트로 알려줌

DMA (Direct Memory Access) Controller

  • 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용
  • CPU 중재 없이 device controller가 device의 buffer storage의 내용을 메모리에 block 단위로 직접 전송

저장장치 계층 구조

Untitled

Q. SSD???

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

Untitled

프로그램은 실행파일 형태로 하드디스크에 저장되어 있다. 실행파일을 실행시키면 메모리로 올라가 프로세스가 된다. 물리적인 메모리에 바로 올라가는 것이 아니도 virtual memory 단계를 거친다.

프로그램을 실행시키면 그 프로그램만의 독자적인 주소공간(Address space)가 만들어진다.

  • code : 프로그램 실행코드
  • data : 변수, 자료구조를 담고 있다
  • stack : 함수를 호출하거나 리턴할 때 쌓는 곳

컴퓨터를 켰을 때 커널은 항상 메모리에 올라가있다.

프로세스의 코드가 모두 물리적인 메모리에 올라가는 것이 아니고 진짜 실행되는 부분만 올라간다.

커널 주소 공간의 내용

Untitled

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

  • 사용자 정의 함수 : 자신의 프로그램에서 정의한 함수
  • 라이브러리 함수 : 자신의 프로그램에서 정의하지 않고, 갖자 쓴 함수, 자신의 프로그램의 실행 파일에 포함되어 있다
  • 커널 함수 : 운영체제 프로그램의 함수, 커널 함수의 호출 = 시스템 콜

'CS > 운영체제' 카테고리의 다른 글

프로세스  (0) 2022.03.15
컴퓨터 내부의 언어체계  (0) 2022.01.18

컴퓨터는 내부적으로 ‘비트’를 사용한다. 1비트는 0 또는 1을 표현한다.

논리연산은 비트들이 표현하는 내용으로부터 새로운 동작을 만들어낸다. 불리언대수는 비트에 사용할 수 있는 연산 규칙의 집합이다. NOT, AND, OR, XOR, 드모르간의 법칙이 있다.

참고로 1byte는 8bit.

비트로 표현하기

숫자

  • 정수를 비트로 표현
    • 덧셈 : 두 비트를XOR, 올림은 AND한 값과 같다
    • 음수 표현은 부호 비트를 사용한다
  • 실수를 표현하는 방법
    • 고정 소수점 : 메모리가 많이 필요하다
    • 부동 소수점
      • ex) 0.0012 → 1.2 x 10^-3
  • 2진수를 다루는 쉬운 방법
    • 8진법 : 0으로 시작
    • 16진법 : 0X로 시작
    • 10진법 : 1~9로 시작

텍스트

  • ASCII 코드 : 키보드에 잇는 모든 기호에 대해 7비트 수를 할당(0~128)
  • 영어 이외의 표준 : ISO-646, ISO-8859, JISX, KSC5661등 → 비트가 비쌌기 때문에 7이나 8bit에 문자를 욱여 넣음
  • UNICODE : 비트 가격이 떨어지면서 문자에 16비트 코드를 부여한 것
  • 그래서 한 문자를 8비트(1byte)
  • 인코딩 : 다른 비트 패턴을 표현하기 위해 사용하는 비트 패턴
    • UTF-8(Unicode Transformation Format-8) : 8비트 시퀀스로 인코딩, 모든 아스키 문자를 8비트로 아스키가 아닌 문자의 경우 깨지지 않는 방법으로 인코딩한다.

  • 컴퓨터 그래픽스는 전자 모눈에 점을 찍어서 표현한다 - pixel
  • RGB 컬러
    • Red, Green, Blue의 색의 조합으로 나타낸 3채널 컬러 이미지 저장방식
    • 각 채널은 8bit 즉, 0~255 사이의 값
    • 컬러 영상에서는 각 8bit의 기본 컬러 3개를 조합해 256x256x256=16,777,216개의 컬러를 만들어 낼 수 있다. = 24bit 트루컬러
    • 1pixel = 8bit x 3 = 3byte (24bit 채널 이미지 기준)
  • Hex 코드
    • RGB 색상을 R,G,B 각각 두자리씩 16진수로 나타낸 표현법
    • ex] RGB(255,255,255) = #ffffff

이미지 - 비트맵과 벡터

비트맵 그래픽은 서로 다른 점(픽셀)의 조합으로 그려지는 이미지 표현방식이다. 비트맵 이미지는 정교하고 화려한 표현이 가능하며, 주로 사진 이미지에 사용된다. 비트맵 이미지는 크기를 늘리거나 줄이면 원본 이미지에 손상이 간다. 비트맵 이미지는 이미지를 표시하는 방식에서 컴퓨터에 부담을 덜 주는 구조를 갖고 있기 때문에 웹에서 이미지를 표시할 때는 주로 비트맵 이미지를 사용한다. JPG, JPEG, PNG, GIF가 모두 비트맵 방식이다.

벡터 이미지는 점과 점을 연결해 수학적 원리로 그림을 그려 표현하는 방식이다. 이미지를 늘리고 줄여도 손상이 되지 않지만, 사진과 같은 복잡한 그림을 표현하려면 컴퓨터에 부하가 걸린다.

PNG

Portable Network Graphics

무손실 압축 포맷을 채택했으며, 256색에 한정된 GIF의 한계를 극복해 32비트 트컬러(RGB 채널 + 알파채널 8bit)를 표현할 수 있게 되었다. 알파채널을 추가했기 때문에 불투명도를 지정할 수 있다.


reference

'CS > 운영체제' 카테고리의 다른 글

프로세스  (0) 2022.03.15
컴퓨터 시스템의 구조  (0) 2022.03.15

+ Recent posts