TIL/TIL

[CS] OS 관련

JoJobum 2022. 9. 25.

프로세스 생성과정

  1. PCB가 생성되며 OS가 실행한 프로그램의 코드를 읽어들여 프로세스에 할당된 메모리의 Text Segment에 저장한다 
  2. 초기화된 전역 변수 및 static 변수를 data segment에 할당
  3. HEAP과 Stack은 초기 메모리 주소만 초기화됨
  4. PCB에 여러 정보가 기록되면 Ready Queue에서 CPU를 할당받기까지 대기

 

프로세스와 쓰레드의 차이

이미지 출처: [OS] 프로세스와 스레드의 차이 - Heee's Development Blog (gmlwjd9405.github.io)

 

프로세스는 운영체제로부터 자원을 할당 받은 작업의 단위

쓰레드는 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위, CPU 입장에서 최소 작업 단위

 

프로세스는 운영체제의 안정성을 위해 자신에게 할당된 메모리 내의 정보에만 접근할 수 있음 

=> 한 프로그램 처리할 때 프로세스를 여러개 사용 불가, 프로세스 말고 여러 작업을 처리하기 위해 더 작은 실행 단위가 필요해짐 

=> 쓰레드 개념 등장 (쓰레드간 메모리 공유)

 

프로세스가 할당받은 메모리 영역 내에서 Code/Data/Heap 형식으로 할당된 메모리 영역 공유, 각 쓰레드는 Stack 형식의 메모리 영역 할당 받음 => 쓰레드는 메모리 영역의 내용을 공유하기에 특정 쓰레드에서 오류 발생시 같은 프로세스에 있는 다른 쓰레드들에게 영향주기에 강제 종료함, 

 

한 프로세스 안에서 여러개의 쓰레드 생성될 수 있음 

 

+) 크롬 탭은 프로세스? 쓰레드?

크롬은 탭마다 PID 가지고 있음 => 프로세스, 각 Tab 마다 랜더링 정보나 기타 데이터를 따로 관리 => 메모리 많이 사용

But, 특정 Tab의 오류가 다른 Tab에 영향주지 않음

 

 

Context-Switching

Context-Switching 은 한 Task가 끝날 때까지 기다리는 것이 아니라 여러 작업을 번갈아가며 실행해서 동시에 처리될 수 있게 하는 방법

인터럽트 발생하면 현재 프로세스 상태 PCB에 저장하고 새로운 프로세스의 상태를 레지스터에 저장하는 방식으로 동작, Context-Switching 중에는 CPU가 일을 하지 않음으로 자주 발생하면 비효율적

 

스레드의 경우 프로세스에 비해 캐시메모리나 PCB에 저장해야하는 내용이 적고, 비우는 내용도 적기에 상대적으로 빠름

 

 

동기(Sync)와 비동기(aSync)

동기는 메소드 리턴과 결과를 전달받는 시점이 일치하는 명령 실행 방식, 또한 메소드가 끝나는 시간과 다음 메소드의 시작 시간이 같음

비동기 방식은 여러 개의 처리가 함께 실행되는 방식, 동기 방식에 비해 단위시간 당 많은 작업 처리 가능. 단 CPU나 메모리를 많이 사용하는 작업을 비동기로 처리하게 되면 과부하가 걸릴 수 있음. 프로그램의 복잡도도 증가

 

블로킹과 논블로킹

블로킹 방식 = 대상의 작업이 끝날 때까지 제어권을 대상이 가지고 있는 것을 의미

ex) A 함수가 B 함수 호출 시,

=> 제어권을 A가 B에게 넘겨줌, 제어권 넘겼기에 A는 중지

=> B가 완료되면 다시 제어권 A에게 돌려줌

 

논블로킹 방식 = 대상의 작업 완료여부와 상관없이 새로운 작업을 수행

ex) A 함수가 B 함수 호출 시,

=> A가 제어권 그대로 들고 있음 B는 실행됨 

=> B가 호출하고, A는 계속 실행됨 

 

=> 동기+논블로킹 = 계속 polling을 수행하기에 Context-Switching이 지속적으로 발생해서 지연 발생

ex) A 함수가 B 함수를 호출한 경우,

A 함수가 B 함수에게 제어권 주지 않고 실행시키면서 (논블로킹)

A 함수는 B 함수의 리턴값 필요하기에 계속 실행 완료했는지 물어봄 (동기)

 

Heap과 Stack의 차이점

Heap은 메모리 주소가 낮은 영역부터 채워짐

Stack은 메모리 주소가 높은 영역부터 채워짐

 

Heap은 동적 할당할 경우 할당됨

Stack은 함수를 호출할 때 함수 내부의 지역변수를 저장하거나 함수를 호출한 caller의 정보를 저장

 

물리적으로 같은 메모리 공간 공유하지만 쓰임새가 다르고 서로의 영역을 누가 침범하느냐에 따라 Stack/Heap overflow 발생

 

멀티태스킹과 멀티쓰레드

멀티태스킹 = 하나의 운영체제에서 여러 프로세스가 실행되는 것 의미 (동시에 실행되는 것처럼 보이지만 아님)

멀티쓰레드 = 하나의 프로세스가 여러 작업을 여러 쓰레드로 동시 처리하는 것

 

멀티쓰레드 기준 

장점

  • 멀티 프로세스에 비해 메모리 자원 소모 줄어들음
  • 힙 영역을 통해서 스레드간 통신이 가능해 프로세스간의 통신보다 간편
  • 쓰레드의 Context-Switching이 프로세스 보다 빠름

단점

  • 힙 영역의 자원 사용할 때 동기화해야 하는데, 이 때 락을 과도하게 사용하면 성능 저하 가능성 있음
  • 하나의 쓰레드가 비정상적으로 동작시 다른 쓰레드도 종료될 수 있음

 

Thread-Safe

2개 이상의 쓰레드가 race condition에 들어가거나 같은 객체에 동시에 접근해도 연산 결과의 정합성이 보장될 수 있게끔 메모리 가시성이 확보된 상태

 

*race condition(경쟁 상태): 여러 프로세스나 스레드가 동기화 메커니즘 없이 자원에 접근하려는 상황. 공유된 자원에 대한 접근 순서에 따라 실행 결과가 달라질 수 있는 상황

 

프로세스 동기화

다중 프로세스 환경에서 자원등에 한 프로세스만이 접근 가능하게도록 하는 것

프로세스 동기화를 하지 않으면 데이터의 일관성이 깨지기 때문에 연산 결과가 잘못되는 경우가 발생할 수 있음

 

Critical Section(임계 구역): 여러 쓰레드가 동시에 접근해서는 안되는 공유자원에 접근하는 코드 블럭

한 임계 구역에는 1개의 쓰레드나 프로세스만 접근 가능, 이를 제어하기 위해 세마포어, 뮤텍스 같은 매커니즘 사용

이를 해결하기 위한 조건

  • 상호배제: 한 프로세스가 작업 중이면 다른 프로세스는 접근 금지
  • 진행: 임계 구역에서 작업중인 프로세스 없으면 진입하고자 하는 프로세스 적절하게 선택하여 진입시켜줌
  • 유한 대기: 임계 영역으로 진입 요청한 후 다른 프로세스는 진입이 유한한 횟수로 제한됨으로서 기아상태 방지

 

교착상태(Deadlock) 와 기아상태(Starvation)

 

교착 상태는 서로 다른 프로세스가 서로 정유하고 있는 자원의 반납을 대기하는 상태

 

발생 조건

  • 상호 배제: 한번에 한 프로세스만 해당 자원 사용 가능
  • 점유 대기: 할당된 자원 들고 다른 자원 기다린다
  • 비선점: 다른 프로세스가 사용 중인 자원 뺏지 않는다
  • 순환 대기: 각 프로세스가 순환적으로 다음 프로세스가 요구하는 자원 가지고 있다

 

해결 방법

  • 예방: 4가지 조건 중 하나라도 피하자
  • 회피: 알고리즘을 통한 해결
  • 회복: 교착 상태 발생시 해결
  • 무시: 회복과정의 성능 저하가 심하다면, 무시

기아 상태는 여러 프로세스가 부족한 자원을 점유하기 위해 경쟁할 때, 특정 프로세스는 영원히 자원 할당이 안되는 경우

=> 자원 할당 받지 못하는 프로세스는 우선 순위에서 계속 밀리는 것이기 때문에 우선순위를 변경하여 해결

 

세마포어와 뮤택스

세마포어는 여러개의 프로세스가 접근 가능한 공유 자원 관리하는 방식

뮤텍스는 한 번에 한 개의 프로세스만 접근 가능하도록 관리하는 방식

(=> 세마포어는 뮤텍스가 될 수 있음, But 역은 안됨)

 

가상 메모리

가상 메모리는 프로세스가 실제 메모리의 크기와 상관없이 메모리를 이용할 수 있도록 지원하는 기술

실제 메모리(RAM)와 보조 기억장치의 Swap 영역으로 구성

OS는 메모리 관리자를 통해 메모리를 관리하여 프로세스 입장에서는 실제 메모리인지 Swap 영역인지 모름

Swap 영역은 실제 메모리가 아니기에 지연시간이 많이 발생, 가급적이면 사용하지 않는 것이 좋고 메모리 누수에 주의해야 함

 

캐시의 지역성

 

시간 지역성: 최근에 접근한 데이터에 다시 접근하는 경향

공간 지역성: 최근에 접근한 데이터와 인접한 데이터에 다시 접근하는 경향

[CS] 캐시(Cache), 지역성(Locality) — Registro (tistory.com)

 

[CS] 캐시(Cache), 지역성(Locality)

캐시(Cache)란? 자주 사용하는 데이터를 복사해두는 임시 장소이다. 메모리 계층 구조 (Memory Hierarchy) CPU는 작은 메모리일수록 빠르게 접근할 수 있음 + 자주 쓰는 데이터는 계속 자주 쓰인다 (= 시

lackofwillpower.tistory.com

 

프로세스 관련 용어

PCB : 프로세스 컨트롤 블록, 프로세스 관련 정보 저장

PC: 프로그램 카운터, 프로세스 실행을 위한 다음 명령의 주소 표시

캐시 메모리: 자주 사용되는 데이터가 저장되는 공간, CPU의 레지스터와 메모리 사이의 병목 현상을 완화하는 장치

 

 

 

참고자료 

ksundong/backend-interview-question: 백엔드 개발자로 입사를 준비하며 받았던 질문, 예상했던 질문, 인터넷 참고한 질문(CC BY-NC) (github.com)

 

GitHub - ksundong/backend-interview-question: 백엔드 개발자로 입사를 준비하며 받았던 질문, 예상했던 질

백엔드 개발자로 입사를 준비하며 받았던 질문, 예상했던 질문, 인터넷 참고한 질문(CC BY-NC) - GitHub - ksundong/backend-interview-question: 백엔드 개발자로 입사를 준비하며 받았던 질문, 예상했던 질문,

github.com

+ 구글링 기타 자료들...

반응형

'TIL > TIL' 카테고리의 다른 글

[CS] 자료구조/알고리즘 관련(작성중...)  (2) 2022.09.26
[CS] 데이터베이스 관련  (2) 2022.09.25
[JAVA] TIL  (0) 2022.09.06
[JAVA] 오버로딩(overloading) vs 오버라이딩(overriding)  (0) 2022.09.06
[ML] Face Recognition details  (0) 2022.08.24

댓글