운영체제

ROCKBELL·2023년 1월 27일
0

CS 전공지식

목록 보기
17/18

운영체제

하드웨어 상에 프로그램을 동작시키는 주체
운영체제는 응용프로그램이 하드웨어에게 일을 시킬 수 있도록 도와줌

  • CPU - 하드웨어 구성
  • RAM - 자료 저장
  • 운영체제 - 시스템 자원 관리

운영체제의 목적 및 기능

운영체제의 목적은 처리능력 항상, 사용 가능도 향상, 신뢰도 향상, 반환시간 단축

  • 프로세스, 기억장치(메모리), 입출력장치(I/O), 파일 및 정보 등의 자원 관리
  • 자원을 효율적으로 관리하기위해 자원의 스케쥴링 기능 제공
  • 사용자와 시스템간의 편리한 인터페이스 제공
  • 각종 하드웨어와 네트워크 관리

응용프로그램은 운영체제에게 컴퓨터를 조작할 수 있는 권한을 부여 받으며, 운영체제와의 소통을 위헤 시스템 콜로 이루어진 API를 제공받아 호출하여 사용

시스템 콜
운영체제 차원에서 다양한 함수를 제공하는 것

프로세스

프로세스는 프로그램이 실행 중인 상태로, 특정 메모리 공간에 프로그램의 코드가 적재되고 CPU가 해당 명령어를 하나씩 수행하고 있는 상태

사용자 애플리케이션 실행 -> 운영체제 -> 프로세스 -> 메모리 할당 -> 코드 실행 -> 프로그램 수행

프로세스 구성 요소

프로세스 구조체에는 프로세스 마다 독립적으로 관리해야하는 유저 메모리 영역이나 각종 객체들의 포인터들을 관리하는 핸들 테이블을 가지고 있음

  • 유저 메모리 - 프로세스별 독립된 영역을 가게 되는 메모리 공간
    (커널 메모리의 경유 모든 프로세스가 공유)
  • 핸들 테이블 - 프로세스에 사용되는 핸들에 대한 커널 객체 포인터 정보가 저장된 공간 -> 프로세스 종료시 해당 프로세스에서 사용하던 커널 객체 반환
  • 독립적 메모리 공간 - 페이징 기법을 이ㅛㅇㅇ하여 프로세스마다 별도의 고유한 메모리 사용 가능

프로세스 특징

  • 자원 소유 단위 - 프로세스 단위로 할당 받아 관리
  • 디스 패칭 단위 - 하나의 프로세스에서 여러개의 디스패칭 단위가 실행 되며 이 단위를 스레드라고 부름

프로세스 상태

  • 실행 - 프로세스가 프로세서를 자처하여 서비스를 받고 있는 상태
  • 준비 - 실행 될 수 있도록 준비되는 상태
  • 대기 - 입츌력의 시간을 기다리는 상태

프로세서 VS 프로세스

프로세서

프로세서는 중앙처리장치 CPU를 의미하며(하드웨어), 데이터 포맷을 변환하는 역할을 수행하는 데이터 처리 시스템 (소프트웨어)을 뜻함

프로세스

프로세스는 특정 목적을 수행하기 위해 나열된 작업의 목록
메모리에 적재되어 실행중인 프로그램을 뜻함

스레드

명령어가 CPU를 통해서 수행되는 객체 단위
하나의 프로세스는 반드시 한 개 이상의 스레드가 존재
같은 프로세스 내에서 스레드는 자원과 상태를 공유할 수 있음

스레드는 왜 필요한가

여러 개의 작업 단위로 구성된 프로그램에서 요청을 동시에 처리하기 위함

스레드의 구성 요소

  • 가상 CPU - 인터프리터, 컴파일러에 의해 내부적으로 처리되는 가상 코드
  • 수행 코드 - 스레드 클래스에 구현되어있는 run() 메서드 코드
  • 처리 데이터 - 스레드에서 처리하는 데이터

스레드의 특징

  • 하나의 스레드는 시작해서 종료할때까지 한번에 하나씩 명령을 수행
  • 각 스레드마다 call stack 존재하며 , 나머지 Code, Data, Heap 영역은 스레드끼리 공유
  • 스레드는 독립적으로 동작하기 때문에, 두 개 이상의 스레드 및 실행 및 종료 순서는 예측 할 수 없음

싱글 스레드와 멀티 스레드

싱글 스레드

프로세스가 단일 스레드로 동작하는 방식 -> 직렬 처리 -> 하나의 레지스터, 스택
자바스크립트가 대표적인 싱글 스레드 언어

장점

  • 공용 자원 접근에 대한 동기화를 신경쓰지 않아도 됨
  • 문맥 교환 필요 없음
  • 프로그래밍 난이도가 쉽고 CPU메모리를 적게 사용

문맥 교환
여려개의 프로세스가 하나의 프로세서를 공유할때 발생하는 작업으로 많은 비용 필요

단점

  • 하나의 물리적 코어밖에 사용할수 밖에 없어서 여러개의 CPU활용 불가능
  • 프로세스끼리 자원 공유가 어렵기때문에 Redis같은 부가 인프라 필요
  • 에러처리를 못하는 경우 동작 멈춤

멀티 스레드

하나의 프로세스 내 여러개의 스레드로 작업 수행 -> 병렬 처리 -> 여러개의 CPU사용 -> 시스템 자원 활용 극대화 및 처리량 증대

장점

  • 작업을 분리해서 수행하므로 작업이 끝나기전까지 기다릴 필요 없이 실시간으로 사용자 응답 가능
  • 한 프로세스를 여러 프로세서(CPU) 에서 수행 할수 있어 효율적

단점

  • 주의 깊은 설계가 필요하여 디버깅 복잡
  • 문맥 교환 작업 요구
  • 자원 공유로 인해 문제 발생시 전체 프로세스 영향
  • 단일 프로세스 시스템 일 경우 효과 기대 어려움
profile
luv it

0개의 댓글