[CS] 운영체제 (2)

young-gue Park·2023년 9월 19일
0

CS

목록 보기
9/18
post-thumbnail

⚡ 운영체제 (2)


📌 프로세스

🔷 컴퓨터에서 실행되고 있는 프로그램으로, CPU 스케줄링의 대상이 되는 작업(task)라는 용어와 거의 같은 의미로 쓰인다.

  • 프로그램으로부터 인스턴스화 되었다.

    💡 프로그램
    컴파일러가 컴파일 과정을 거쳐 컴퓨터가 이해할 수 있는 기계어로 번역되어 실행될 수 있는 파일이 되는 것


컴파일 과정

  • 컴파일(compile): 인간이 이해할 수 있는 언어로 작성된 소스 코드(고수준 언어 : C, C++, Java 등)를 CPU가 이해할 수 있는 언어(저수준 언어 : 기계어)로 번역(변환)하는 작업

  • 전처리 과정 - 컴파일 과정 - 어셈블리 과정 - 링킹 과정 순으로 이루어진다.

  1. 소스 코드 파일을 전처리기에 넣어 전처리 과정을 거친다.

💡 전처리(Pre-processing) 과정
소스 코드의 주석제거, 헤더 파일 삽입, 매크로 치환 및 적용의 역할을 한다.

  1. 전처리된 소스 코드 파일을 컴파일러에 넣어 어셈블리어 파일로 변환하는 컴파일(Compile) 과정을 거친다. 이 과정에서 static 영역의 메모리 할당과 문법 검사가 진행된다.

💡 컴파일러
오류 처리, 코드 최적화 작업을 하며 어셈블리어로 변환한다. 컴파일러는 프론트엔드, 미들엔드, 백엔드로 구성되어 있는데 자세한 설명은 생략한다.

💡 어셈블리어
기계어를 사람이 이해할 수 있게 부호화한 것, CPU 명령어와 1대1로 매칭된다.

  1. 어셈블러(Assembler)를 통해 어셈블리어 파일을 오브젝트 파일로 변환한다. 이 과정을 어셈블리(Assembly) 과정이라고 한다.

💡 오브젝트 파일
어셈블리 코드가 변환된 기계어를 오브젝트 코드라 부르고, 이 오브젝트 코드로 구성된 파일을 오브젝트 파일이라 부른다. 이는 특정한 파일 포맷을 지니고 있다.

  1. 링킹(Linking) 과정에서 링커(Linker)를 통해 오브젝트 파일들을 묶어 실행 파일로 만든다. 이 과정에서 오브젝트 파일들과 프로그램에서 사용하는 라이브러리 파일들을 링크하여 하나의 실행 파일을 만든다.

💡 링커
프로그램 내에 있는 라이브러리 함수 또는 다른 파일들과 목적 코드를 결합하여 실행파일을 만든다. 또한 심볼 해석과 재배치의 역할을 맡고 있다.

💡 링킹 과정에서 라이브러리를 링크하는 방식에 따라 정적 링킹(Static Linking)동적 링킹(Dynamic Linking)으로 나뉘는데 정적 링킹과정에서 링커가 프로그램에 필요로 하는 부분을 라이브러리에서 찾아 실행 파일에 복사하면 정적 라이브러리, 동적 링킹 과정에서 링커가 라이브러리 내용을 복사하지 않고 해당 내용의 주소만 가지고 있다가 런타임에 실행 파일과 라이브러리가 메모리에 위치할 때 해당 주소로 가서 필요한 내용을 가져오면 동적 라이브러리라고 부른다. 동적 라이브러리는 실행 파일에서 *dll 함수를 호출하는 방법에 따라 암시적 링킹명시적 링킹으로 또 한번 나눌 수 있다.

👍 컴파일, 정적 라이브러리와 동적 라이브러리


프로세스의 상태

  1. 생성 상태(Create)
  • 프로세스가 생성된 상태

  • fork()(부모 프로세스의 주소 공간 복사하여 프로세스 생성) 혹은 exec()(새 프로세스 생성) 함수를 이용하여 생성한다.

  • PCB가 할당된다.

    💡 PCB(Process Control Block)
    특정한 프로세스를 관리할 필요가 있는 정보를 포함하는, 운영체제 커널의 자료구조이자 운영체제가 프로세스 스케줄링을 위해 프로세스에 관한 모든 정보를 가지고 있는 데이터베이스, PCB를 교환하는 과정을 컨텍스트 스위치라고 한다.

    PCB

    컨텍스트 스위치(Context switch)

  1. 대기 상태(ready)
  • 메모리 공간이 충분하면 메모리를 할당받고, 아니면 아닌 상태로 대기한다.
  1. 대기 중단 상태(ready suspended)
  • 메모리 부족으로 일시 중단된 상태
  1. 실행 상태(running)
  • CPU 소유권과 메모리를 할당받고 인스트럭션을 수행 중인 상태, CPU burst

💡 인스트럭션(instruction)
컴퓨터 구조의 명령어 집합 내의 프로세서 명령

  1. 💡 중단 상태(blocked)
  • 어떤 이벤트가 발생한 이후 기다리며 프로세스가 차단된 상태
  • 주로 I/O 디바이스에 의한 인터럽트로 인해 발생한다.
  1. 💡 일시 중단 상태(blocked suspended)
  • 중단된 상태에서 프로세스가 실행되려고 했지만 메모리 부족으로 일시 중단된 상태
  1. 💡 종료 상태(terminated)
  • 메모리와 CPU 소유권을 모두 놓고 가는 상태
  • 자연스럽게 종료되거나 부모 프로세스가 자식 프로세스를 강제 종료 시킬 수도 있다.

프로세스의 메모리 구조

  1. 스택(Stack)
  • 지역변수, 매개변수, 함수가 저장되고 컴파일 시에 크기가 결정되며, 동적이다.
  • 함수의 재귀 호출 시 동적으로 크기가 늘어날 수 있으며, 이 때 힙과 메모리 영역이 겹치는 것을 방지하기 위해 힙과 스택 사이의 공간을 비워놓는다.

💡 스택은 위 주소부터, 힙은 아래 주소부터 할 당하기 때문에 공간을 비우지 않으면 메모리 영역이 겹쳐버린다.

  1. 힙(Heap)
  • 동적 할당할 때 사용되며 런타임 시 크기가 결정되며, 동적이다.
  1. 데이터 영역
  • 전역 변수, 정적 변수가 저장되고 정적인 특징을 갖는 프로그램이 종료되면 사라지는 변수가 들어 있는 영역
  • BSS 영역(초기화가 되지 않은 변수가 0으로 초기화되어 저장)과 Data segment(0이 아닌 다른 값으로 할당된 변수들이 저장)로 나뉜다.
  1. 코드 영역
  • 프로그램에 내장되어 있는 소스 코드가 들어가는 영역
  • 수정 불가능한 기계어로 저장되어 있으며, 정적이다.

멀티 프로세싱

  • 여러 개의 프로세스(멀티 프로세스)를 통해 동시에 2가지 이상의 일을 수행할 수 있는 것
  • 하나 이상의 일을 병렬로 처리하거나 다른 프로세스를 이용한 문제 프로세스 처리 등이 가능해지므로 신뢰성이 높다.
  • 대표적으로 웹 브라우저가 멀티프로세스 구조를 가지고 있다.

🔷 IPC(Inter Process Communication)

  • 멀티 프로세스끼리 데이터를 주고받고 공유 데이터를 관리하는 메커니즘

  • 클라이언트의 요청 및 서버의 응답도 IPC의 일종이다.

  • 메모리가 완전히 공유되는 스레드보다 속도가 떨어진다.

  • IPC의 종류
    1) 공유 메모리(shared memory): 여러 프로세스에 동일한 메모리 블록에 대한 접근 권한이 부여되어 프로세스가 서로 통신할 수 있도록 공유 버퍼를 생성하는 것

    공유 메모리

    2) 파일: 디스크에 저장된 데이터 또는 파일 서버에서 제공한 데이터

    3) 소켓: 동일한 컴퓨터의 다른 프로세스나 네트워크의 다른 컴퓨터로 네트워크 인터페이스를 통해 전송하는 데이터, TCPUDP로 나뉜다.

    💡 TCP(전송 제어 프로토콜)
    두 개의 호스트를 연결하고 데이터 스트림을 교환하게 해주는 중요한 네트워크 프로토콜, 컴퓨터가 다른 컴퓨터와 데이터 통신을 하기 위한 규약의 일종이다. IP가 함께 사용되는데, IP가 데이터의 전송을 처리한다면 TCP는 패킷 추적 및 관리를 하게 된다. 연결 지향형.

    💡 UDP(사용자 데이터그램 프로토콜)
    인터넷상에서 서로 정보를 주고받을 때 정보를 보낸다는 신호나 받는다는 신호 절차를 거치지 않고 보내는 쪽에서 일방적으로 데이터를 전달하는 통신 프로토콜, 비연결형.

    4) 익명 파이프(unnamed pipe): 프로세스 간에 선입선출 방식으로 읽히는 임시 공간인 파이프를 기반으로 데이터를 주고 받으며, 단방향 방식의 읽기 전용, 쓰기 전용 파이프를 만들어서 작동하는 방식, 다른 네트워크 상에서는 사용 불가

    5) 명명된 파이프(named pipe): 파이프 서버와 하나 이상의 파이프 클라이언트 간의 통신을 위해 명명된 단방향 혹은 이중 파이프, 여러 파이프를 동시에 사용할 수 있으며 컴퓨터의 프로세스끼리 또른 다른 네트워크 상의 컴퓨터와도 통신이 가능

    6) 메시지 큐: 메시지를 큐(queue) 자료 구조 형태로 관리하는 것, 커널의 전역변수 형태 등 커널에서 전역적으로 관리 되고 접근 방법이 간단하다.

profile
Hodie mihi, Cras tibi

0개의 댓글