운영체제

다람·2023년 5월 18일
0

운영체제

목록 보기
1/2
post-thumbnail

운영체제란?

시스템의 자원과 동작을 관리하는 소프트웨어로 프로세스, 저장장치, 네트워킹, 사용자, 하드웨어 등을 관리한다.

프로세스와 쓰레드 설명 및 차이

프로세스 : 실행중인 프로그램이며, 완벽히 독립적이기 때문에 메모리 영역(code, data, heap, stack)을 다른 프로세스와 공유하지 않는다. 프로세스는 최소 1개의 쓰레드를 가지고 있다.

쓰레드 : 프로세스 내에서 실제로 작업을 수행하는 주체로서 한 개 이상의 쓰레드가 존재하며 두 개 이상의 쓰레드를 가지는 프로세스를 멀티 프로세스라고 한다. 프로세스 내에서 stack만 따로 할당 받고, 그 외에 메모리 영역(code, data, heap)을 공유하기 때문에 다른 쓰레드의 실행 결과를 바로 확인할 수 있다. 쓰레드는 프로세스 내에 존재하며 프로세스가 할당받은 자원을 이용해 실행된다.

멀티 프로세스와 멀티 쓰레드의 특징

멀티 프로세스 : 하나의 프로세스가 죽어도 다른 프로세스에 영향을 끼치지 않고 계속 실행된다는 장점이 있지만 멀티 쓰레드보다 많은 메모리 공간과 cpu 시간을 차지한다는 단점이 있다.

멀티 쓰레드 : 멀티 프로세스보다 적은 메모리 공간을 차지하고 문맥 전환이 빠르다는 장점이 있지만 하나의 쓰레드에 문제가 생기면 전체 쓰레드가 영향을 받으며 동기화 문제도 있는 단점이 있다.

멀티 쓰레드의 동시성과 병렬성

동시성은 멀티 작업을 위해 싱글 코어에서 여러 개의 쓰레드가 번갈아 실행하는 것을 말한다. - 동시에 실행하는 것처럼 보이지만 사실은 번갈아가며 실행하고 있는 것임!

병렬성은 멀티 작업을 위해 멀티 코어에서 한 개 이상의 쓰레드를 포함하는 각 코어들을 동시에 실행하는 것을 말한다.

멀티 프로세스 대신 멀티 쓰레드를 사용하는 이유

  • 자원의 효율성을 증대
  • 처리 비용 감소 및 응답 시간 단축

멀티 쓰레드 환경에서의 주의사항

다수의 쓰레드가 공유 데이터에 동시에 접근하는 경우에 상호배제 또는 동기화 기법을 통해 동시성 문제 또는 교착 상태가 발생하지 않도록 주의해야 한다.

동기와 비동기

동기는 순차적, 직렬적으로 테스크를 수행하고 비동기는 병렬저그로 테스크를 수행한다.
예를 들어 서버에서 데이터를 가져와 화면에 표시하는 작업을 수행할 때,
동기는 서버에 데이터를 요청하고 데이터가 응답될 때까지 이후 테스크들은 작업중단되며, 비동기는 서버에 데이터를 요청한 이후 서버로부터 데이터가 응답될 때까지 대기하지 않고 즉시 다음 테스크를 계속해 수행한다.

컨텍스트 스위칭이란?

멀티 프로세스 환경에서 cpu가 어떤 하나의 프로세스를 실행하고 있는 상태에서 인터럽트 요청에 의해 다음 우선 순위의 프로세스가 실행되어야 할 때 기존의 프로세스의 상태 또는 레지스터 값을 저장하고 cpu가 다음 프로세스를 수행하도록 새로운 프로세스의 상태 또는 레지스터 값을 교체하는 작업을 말한다.

운영체제 실행파일 생성 과정

  1. 전처리기 치환
  2. 컴파일러
  • 소스코드를 어셈블리 코드로 번역
    (어셈블리 코드는 cpu에게 일을 시킬 수 있는 명령어의 조합)
  1. 바이너리 코드 생성
  • 2단계를 거친 어셈블리 코드를 어셈블리에 의해 바이너리 코드로 변환
  1. 링커에 의한 연결과 결합
  • 링커가 생상한 코드에서 참조하는 라이브러리들을 하나로 묶는 작업
  • 이 과정이 끝나면 실행파일이 생성

프로그램 실행 과정

  1. loading 단계
  • 하드 드라이브에 있는 실행 프로그램을 메모리에 올린다.
  1. fetch 단계
  • 메모리에 올라온 실행 프로그램을 cpu의 레지스터(명령어를 임시로 저장하는 곳)에 올린다.
  1. decode 단계
  • ALU(cpu의 연산하는 단계)에서 연산하기 전, 레지스터의 명령어를 cpu의 제어 장치에서 해독한다
  1. execution(실행) 단계
  • 해독된 명령어들을 ALU에서 연산

캐시

캐시 메모리란 데이터를 미리 복사해두는 임시 저장공간이며
캐시는 저장 공간이 작고 비용이 비싼 대신 빠른 성능을 제공한다.

캐시라인

캐시에 데이터를 저장할 때, 특정 자료구조를 사용하여 묶음으로 저장하게 되는 방법

메모리 구조

메모리 구조는 총 4가지의 구조가 있으며 code, data, heap, stack
code : 소스코드가 들어가는 부분
data : 전역변수, 정적변수가 할당되는 부분
heap : 사용자가 직접 관리하는 영역으로 데이터가 동적으로 할당되는 공간
stack : 함수의 호출 정보, 지역변수, 매개변수들이 저장

전역변수와 정적변수의 차이

같은 점 - 둘 다 프로세스가 죽을 때까지 유지되기 때문에 초기화가 필요하다는 것
다른 점 - 전역변수는 해당 프로그램의 어느 함수, 어느 파일에서도 접근이 가능하지만 정적변수는 변수가 선언된 파일이나 함수 내에서만 접근이 가능하다.

heap, stack 비교

힙 영역은 동적 메모리 구조를 가지며 스택 영역은 정적 메모리 구조를 가진다.
스택 영역

  • 함수 내에 정의된 지역변수와 매개변수가 저장된다.
  • 함수의 호출이 차곡차곡 메모리에 쌓이고 처리가 끝나면 메모리에서 해제된다.

힙 영역

  • 자바에서 new 연산자로 생성된 객체와 배열을 저장하는 공간
  • GC를 통해 메모리를 반환한다.

데이터 영역와 스택영역은 컴파일러가 미리 공간을 예측하고 할당할 수 있지만 동적 변수는 어느 시점에 어느 정도의 공간으로 할당될지 정확하게 예측할 수 없기 때문에 프로그램 실행 중(runtime)에 결정된다.

가시성과 원자성

가시성 : 자료의 구조가 갖고 있는 복잡한 부분이 사용자 눈에 보이지 않게 되있는 상태
원자성 : 어떤 것이 더 이상 쪼개질 수 없는 성질이며 어떤 것이 원자성을 갖고 있다면 원자적이라고 한다. 어떤 작업이 실행될 때 언제나 완전하게 진행돼 종료되거나 그럴 수 없는 경우 실행을 하지 않는 경우를 말한다. 원자성을 갖는 작업은 실행되어 진행되다가 종료하지 않고 중간에서 멈추는 경우는 있을 수 없다!

유효주소와 주소지정방식

유효주소 : 데이터가 저장된 메모리의 실제 주소를 의미 cpu는 유효주소를 통해 메모리에 접근하게 된다.
주소지정방식 : 유효주소를 저장하는 방식이다.

스레싱

하드 디스크의 입출력이 너무 많아져서 잦은 페이지 부재로 마치 작업이 멈춘 것 같은 상태

IPC

프로세스들 사이에 서로 데이터를 주고 받는 방식, 즉 프로세스 간의 통신을 의미한다. 각 프로세스는 독립적인 실행 객체이기 때문에 프로세스 간 통신을 하려면 커널이 제공하는 IPC 모델 방식을 사용해 통신해야 한다.

커널

OS의 모든 부분에 대한 기본 서비스를 제공하는 컴퓨터 운영 체제의 핵심이자 가장 중요한 부분이며 컴퓨터에 속한 자원들에 대한 접근을 중재한다.

경쟁상태

여러 프로세스 및 스레드가 공유 자원에 동시 접근 시 그 순서에 따라 결과가 달라지는 문제

profile
안녕

0개의 댓글