문서만 읽는 건 좀 루즈하다면 - (1) 테코톡 발견, OS/네트워크 개념 돌아보기

yoorabaek·2022년 9월 7일
0
post-thumbnail

-김봉진, 배달의 민족 의장 (세바시에서 '책 잘 읽는 방법')


항상 느끼지만 CS 지식이 중요한 것은 알겠지만 공부하려고 문서를 읽거나 책을 보는 것은 너무 지루하다. 예전에 영어학원이나 좀 재밌는 수업 시간을 떠올려 보면 같은 반 친구들이 돌아가면서 공부할 내용을 발표하는 것을 듣는 것은 좀 덜 지겹고 또 관심있게 보게 되는 수업들이었던 것 같은데, 유튜브에서 비슷한 채널을 발견해서 이번에 한번 쭉 들어볼까 생각중이다.

전문강사도 아니고 현직 개발자도 아닌 나랑 비슷하게 개발자로 취업을 준비하는 (?) 학생들이 열심히 준비해서 발표한 내용들이다. 요새 우테코에 관심을 갖고 있어서 그런가 테코톡이라는 채널이 눈에 들어왔는데 우테코 크루들이 10분가량 중요한 CS나 개발 주제를 가지고 발표를 하는 것을 담은 영상들이다. 근데 안그래도 내가 요새 공부하려고 했던 주제들이 많아서 이 채널을 한번 보면서 공부를 해볼까 했다.

🫧 OS, 운영체제

Topic 1. Process vs. Thread

나만 헷갈리는게 아니었어..!!!
(발표자 분 피피티에 물음표가 상당한 걸 보니 마음이 진정되네요ㅎ)
사실 이렇게 내용을 캡처해서 사용해도 되는지는 모르겠으나.. 누구나 볼 수 있도록 공개해 두신 걸 보니 감사하는 마음으로 캡처..하겠습니다 ㅎ (문제가 된다면 댓글 남겨주세요😷)


프로세스는 "자원 할당" 단위, 스레드는 "작업" 단위

왜 헷갈리나 지금 생각해 보니 단어가 주는 의미가 정확히 무엇인지 항상 모호했다. 위에서 처럼 프로세스와 스레드는 단위가 되는 기준이 자원 할당, 작업인지로 차이가 있다고 하는데, 아무튼 더 들어보는 것으로..

각 프로세스는 독립적이기 때문에 IPC 통신과 Context Switching 비용이 비싸다. 스레드는 작업의 단위이고 스레드 간 자원을 공유하기 때문에 통신이나 스위칭 비용이 적지만 동기화 작업에 신경을 많이 써야함.
코어는 스레드의 작업을 수행하는 프로세서이고, 여러 작업을 번갈아 가면서 동시에 처리한다.


1️⃣ 멀티 프로세스

프로세스란 프로세서에 의해 실행되는 프로그램.

좀 더 자세히 살펴보면, 프로세서는 CPU라고 생각해보면,

CPU라는 프로세서가 프로그램을 실행하기 위해 시스템 메모리인 RAM에 올리고 이 올라간 프로그램은 파이프라인이라는 큐에서 순서대로 프로세서에 의해 실행된다. 그렇게 되면 이 프로그램은 CPU가 실행 중인 프로세스가 되는 것 (오홍)

CPU는 한 번에 하나의 프로세스만 실행하는데 어떻게 컴퓨터가 여러 프로그램을 동시에 돌릴 수 있는 것일까?

그 비밀은 CPU가 여러 프로세스를 번갈아 가면서 실행한다는 점에 있다.

Context Switching

그러면 CPU가 각각의 프로세스가 얼마나 진행되었고, 다음으로 수행해야할 차례를 알아야 하는데

Process Control Block

여기에 저장이 된다.

그리고 프로세스 하나의 구조는 아래처럼 Code, Data, Heap, Stack으로 이루어져 있다.

멀티 프로세스의 단점은 하나의 작업을 여러 프로세스가 나눠서 작업할 때 발견되는데, 코드나 데이터 중복이 있는 경우 또는 프로세스 간 통신 작업을 수행하는 등 컨텍스트 스위칭을 위해 같은 데이터를 중복해서 적재하기 때문에 비용이 많이 든다.


2️⃣ 멀티 스레드

이를 개선하기 위해 등장한 개념이 멀티스레드이다.

멀티 프로세스보다 모든 점이 좋아 보이지만 사실 멀티스레드는 스레드 간에 코드,데이터,힙을 공유하기 때문에 두 스레드가 동시에 접근하면 위험하다.

또한, 스레드 하나에서 발생한 문제로 인해 프로세스가 중단되는 식으로 스레드가 전체 작업에 미치는 영향이 커진다..!

장단점이 각각 있다는..




3️⃣ 멀티 코어

CPU가 물리적 제한으로 기능 개선이 더뎌지자 코어를 늘리는 방법으로 병렬적으로 명령을 수행하게 만든 것이다.

(1) 하이퍼 스레딩

코어 하나에 파이프라인을 두개로 나누어 병렬적으로 처리

(2) 멀티 코어

파이프라인마다 독립적인 프로세스가 존재해서 같은 프로세스를 사용할 필요 X. 물리적으로 코어의 개수를 늘리는 방법

(3) 멀티 CPU

가장 성능이 좋지만 비쌈 ㅠ => 서버 규모에서 사용

(참고 : [10분 테코톡] 쿼리치의 Process vs Thread)

이 다음 영상으로 같은 주제로 발표하신 분이 있어서 또 들어보기로 했다.
[10분 테코톡] 🌷 코다의 Process vs Thread

이번 발표자분은 좀 더 헷갈리는 개념에 대해서 짚어주셔서 앞에서 본 발표 영상이랑 같이 보면 앞의 영상을 보고나서 그래서 멀티 프로세스랑 멀티 스레드가 뭐였지 할 수 있는 찰나에 확실하게 한번 더 잡아줄 수 있을 듯~!

포인트를 너무 잘 짚어주시는 것 같다...👍


(이 파트 설명 너무 도움이 많이 되었다..우테코 분들 왤케 발표도 잘하시는지...?!)

회의실 예약에 비유해서 설명해 주신 것도 진짜 쉽게 이해할 수 있게 설명을 잘 해주신 것 같다. 이거 보고도 스레드가 뭔지 까먹으면 내 머리가 나쁜거임 빼박캔토🫥

이 한장으로 앞에서 설명해주신 내용 모두 정리가 되었다!
이렇게 보면 멀티스레드가 더 좋은 것 같을 수 있는데 왜 굳이 멀티프로세스를 많이 사용하고 있을까? 인터넷 익스플로어의 경우 멀티스레드 방식이어서 한 탭에 문제가 생기면 창 자체가 꺼져버린다. 하지만 크롬은 각 탭이 개별적인 멀티프로세스 방식이어서 문제가 생겨도 전체가 꺼져버리는 식으로 동작하지는 않는다!

(들으면서 내 표정.. 아 이렇게 쉬운거였어??? ㅎㅂㅎ)

이런 용어 정리가 가장 어렵다 ㅠ 비슷한 개념도 많고, 발표자분이 애니메이션의 표현 기법을 예로 들어서 이해를 도와주셨는데 오 그렇게 생각하니 이해가 또 바로 되버리는 것.. 역시 설명도 어떻게 하냐에 따라 정말 다른 것 같다.

추가로 설명해 주신 리눅스의 프로세스 개념도 유익해서 나중에 시간을 내서 각 OS나 프로그램마다 다른 처리과정에 대해 더 공부해 봐야겠다고 느끼게 된 영상들이었다. 좋은 발표 감사합니당.. 🙏





Topic 2. Deadlock (교착상태)

두번째로 만난 OS 관련 영상은 교착상태에 관한 내용이다. 이 토픽도 단골 면접 질문인 만큼 중요한 개념인 것 같아서 영상 두개를 모두 보면서 확실히 알아보려고 한다.

'교착상태' by 위키피디아

두 개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있기 때문에 결과적으로 아무것도 완료되지 못하는 상태

즉, 한정된 자원을 얻지 못해 두개 이상의 프로세스 혹은 스레드가 다음 처리를 진행하지 못하는 상태를 말한다.


흔예(흔한예시)

사실 개념이 어려운 이유는 원리가 어려워서라기 보다는 실제로 가까이에서 어떻게 일어나고 있는지를 모르다보니 와닿지 않아서가 큰 것 같다. 이런 예시 넘 귀행,,📌
->
특정 레코드나 테이블의 데이터를 업데이트 할 때 락을 통해 자원을 얻는데 이때 동일 레코드나 테이블에 여러 트랜잭션이 동시에 업데이트를 진행하면 데드락이 발생할 수 있다고 한다.


  1. 한 개의 자원에 대해 두 개 이상의 프로세스가 접근할 수 없다.
    => 상호 배제
  2. 하나의 자원을 점유하는 프로세스가 다른 프로세스의 자원을 얻기 위해서는 요청 후 대기가 필요하다.
    => 점유 대기
  3. 자원 사용이 끝나기 전까지 다른 프로세스가 자원을 빼앗아 사용할 수 없다.
    => 비선점
  4. 프로세스 간에 서로 사용하는 자원에 대해 순환적으로 대기하는 형태이다.
    => 순환 대기

위의 네가지 조건을 만족하는 때 데드락이 발생한다.
그리고 동시에 이 네가지 조건 중 하나를 제거함으로써 데드락을 예방할 수 있다고 에드워드 코프만 교수가 주장했다. 하지만 이 방식들은 계속 모니터링 해야하는 대상이 많아지는 등 비용이 크다는 문제가 있다.

데드락 가능성을 검사해서 발생 가능성이 있으면 사전에 회피하는 방식도 존재하는데,
자원할당 그래프 알고리즘과 은행원 알고리즘이 그 방법이다.


미리 검사해서 회피하는 방식도 오버헤드가 커서 잘 사용하지 않는다.

주로 많이 사용하는 방법은 교착 상태를 허용하지만 상태를 탐지하고 회복하는 방식이다. 주기적으로 탐지해서 데드락을 체크하고 회복시킨다. 교착 상태를 일으킨 프로세스를 종료하거나 할당된 자원을 해지한다. 교착 상태가 제거될 때까지 프로세스가 점유한 자원을 선점해 다른 프로세스에게 할당한다. 회복 시 고려할 사항으로는 어떤 프로세스를 중단할 지 고르는 희생자 선택, 하지만 이때 주의할 것이 기아상태이다. 하나의 프로세스가 여러번 희생자로 선택당할 수 있기 때문에 여러 가중치를 통해 우선순위를 고려해야한다. 또는 데드락이 어느정도 제거될 정도로만 후퇴(Rollback) 처리를 하는 방식이 있다.

영상 참고 : 🚴‍♂️ 케빈의 Deadlock

0개의 댓글