TIL (Today I Learned)

TIL_230302-0307

남 희 2023. 3. 8. 03:02
더보기

3월 2일 (목)

  • CS 스터디 운영체제 공부 - 프로세스 상태와 프로세스 메모리 구조

3월 3일 (금)

  • 지금까지 배운 디자인 패턴 총 복습, 헤드퍼스트 디자인 패턴 독서로 보충.

3월 5일 (일)

  • 채용 공고 확인, 자소서 초안, 테크트리 정리

3월 6일 (월)

  • CS 스터디 운영체제 공부 - PCB, 멀티 프로세싱, 스레드와 멀티스레딩
  • Android 프로젝트 중복 클릭 방지 로직 추가

3월 7일 (화)

  • 프로젝트 코드 리뷰 및 PR 완료
  • DFS/BFS 알고리즘 문제 해결 및 피드백

1️⃣ 프로세스 상태 (Process State)

New : 프로세스 생성 (fork or exec)

Ready : 메모리에서 대기 상태. 당장 실행 가능한 준비 상태

Running : 메모리를 할당받은 상태에서 CPU 소유권을 가져 명령을 수행중인 상태

Blocked : I/O나 이벤트 발생으로 차단된 상태.

Suspended : 메모리가 부족해 Swapper에 의해 메모리에서 나가 inactive된 상태. Ready상태에서 되면 Suspended ready, blocked상태에서 되면 Suspended blocked

Terminated : 프로세스가 완전히 종료. (exit or abort)

 

2️⃣ 프로세스의 메모리 구조

런타임 때 할당되는 동적 할당 영역인 Stack, Heap과 컴파일 때 할당되는 정적 할당 영역인 Data, Code 영역이 있음.

Stack : 지역 변수, 매개변수, 실행되는 함수 저장. Object를 가리키는 참조 변수.

Heap : 동적 할당 변수, java 모든 Object 타입. 

Data : 전역 변수 또는 static, const 선언되어 있는데 0으로 초기화 또는 어떤 값으로 초기화 X 변수는 BSS segment, 0이 아닌 값으로 초기화된 변수는 Data segment에 할당.

Code : 프로그램 코드. CPU는 이 영역의 명령어를 하나씩 처리.

 

3️⃣PCB (Process Control Block)

프로세스에 대한 메타데이터를 저장한 데이터.

커널 스택 가장 앞부분 관리.

PCB 내부 내용은 다음과 같음.

  • 관리에 필요한 정보 : process state, pid, CPU 스케줄링 정보, 우선순위, 프로세스 권한
  • CPU관련 HW 정보 : program counter, register
  • 계정 정보, I/O 상태 정보

Context Switch : PCB를 교환하는 과정

 

4️⃣ 멀티 프로세싱

멀티 프로세싱 : 여러 개의 CPU로 병렬로 일을 처리하는 것.

멀티 프로세서 : CPU가 여러개인 것.

멀티 프로세스 : 하나의 프로그램을 여러개의 프로세스로 나눠서 동작

 

5️⃣ IPC(Inter Process Communication)

프로세스 간의 데이터를 주고 받고 공유 데이터를 관리하는 메커니즘

공유 메모리(shared memory) : 프로세스들이 같은 메모리 영역을 공유.

메시지 큐 : 메시지를 큐 자료구조를 사용해 커널에서 전역 관리.

익명 파이프 (unamed pipe) : 프로세스 간 FIFO 방식으로 읽히는 임시 공간 파이프로 데이터를 주고 받음. 읽기, 쓰기 전용 분리. 부모/자식 프로세스간에만 사용 가능.

명명된 파이프 (named pipe) : 파이프 서버와 파이프 클라이언트 간 통신을 위한 단방향 or 양방향 파이프.

그 외 파일, 소켓 등이 있음.

 

6️⃣ 스레드 (Thread)

프로세스의 실행 가능한 가장 작은 단위.

각 스레드는 stack 영역, PC, register를 각각 따로 가짐.

 

Task : 스레드가 동료 스레드와 공유하는 부분. - code, data, heap, PC, Register 외 PCB 정보.

 

7️⃣ 멀티 스레딩 (multithreading)

프로세스 내 작업을 여러 개의 스레드로 처리하는 기법

자원 공유해 효율적.

동시성의 장점. (동시성 : 서로 독립적인 작업들을 작은 단위로 나누고, 동시에 실행되는 것처럼 보여주는 것)

스레드에 문제 생기면 다른 스레드에도 영향.

 

 

참고 자료

더보기
주홍철, <면접을 위한 cs 전공지식 노트>, 길벗, 2022

http://www.kocw.net/home/search/kemView.do?kemId=1046323

'TIL (Today I Learned)' 카테고리의 다른 글

TIL_230309  (0) 2023.03.10
TIL_230308  (0) 2023.03.08
TIL_230301  (0) 2023.03.02
TIL_230228  (0) 2023.03.01
TIL_230215  (0) 2023.02.16