🔥딱 8일간! 인프런x토스x허먼밀러 역대급 혜택

인프런 워밍업 클럽 스터디 3기 - 2주차 발자국

인프런 워밍업 클럽 스터디 3기 - 2주차 발자국

[Day 6]

운영체제

1⃣ 프로세스 간 통신

1.1 프로세스 간 통신(Inter Process Communication, IPC)

프로세스 사이에 서로 데이터를 주고받는 행위, 방법, 경로를 IPC라한다.

프로세스가 통신이 가능하다는 것은 서로 다른 프로세스가 데이터를 주고 받을 수 있다는 것이다.

이는 컴퓨터 내부에서의 프로세스 간 소통일수도 있고, 다른 컴퓨터 간에 프로세스 간 소통일 수도 있다.

1.2 프로세스 통신의 종류

한 컴퓨터 내의 프로세스(운영체제영역)간의 방식과 다른 컴퓨터 간 프로세스(네트워크 이용)간의 방식으로 나뉜다.

운영체제에서 지원하는 방식

  • 파일

  • 파이프

네트워크를 사용하는 방식

  • 소켓(tcp, udp 등)

  • RPC(Remote Procedure Call) - 원격 프로시저 호출

1.2.1 프로세스 통신의 종류 상세내용 (+추가내용)

  • 파이프

통신을 위한 메모리 공간을 생성하여 프로세스가 데이터를 주고 받게끔 한다.

한 프로세스가 쓰고 다른 프로세스가 읽는 선입선출(FIFO) 형태의 큐라고 할 수 있다. 이는 단방향 통신이 가능한 파이프의 특징 때문에 반이중(Half-Duplex) 통신이라고 부르기도 한다.

익명 파이프와 네임드 파이프 두 종류로 나뉜다.

익명 파이프(Anonymous Pipe)

부모-자식, 형제 등 통신 대상이 정해진 두 프로세스가 단방향 통신(Half Duplex)할 때 사용한다.

양방향 통신(Full duplex)을 위해선 익명 파이프가 두 개 필요한데, 이는 구현이 복잡하다.

네임드 파이프(Named Pipe)

Anonymous Pipe가 확장된 형태로, 파일 시스템에 이름이 부여된 파이프를 말함.

FIFO라는 통신을 위한 파일을 만들고, 이를 통해 양방향 통신이 가능하다.

 

  • 소켓

네트워크 소켓 통신을 통해 데이터를 공유한다.

양쪽 PC에서 각각 임의의 포트를 정하고 해당 포트 간의 대화를 통해 데이터를 주고받는 형식이다.

양방향 통신이 가능하다.

 

2⃣ 공유자원과 임계구역

한정된 자원을 가지고 프로세스가 동시에 작업할 경우 동기화에 문제가 생길 수 있다.

2.1 공유자원으로의 접근

공유 자원은 여러 프로세스가 공동으로 이용하는 변수, 메모리, 파일 등을 말한다.

이는 각 프로세스 접근 순서에 따라 그 결과가 달라질 수 있다.

2.2 경쟁 조건(Race Condition)

경쟁 조건은 2개 이상의 프로세스가 공유 자원을 병행적으로 읽거나 쓰는 상황을 말하며, 공유 자원 접근 순서에 따라 실행 결과가 달라지는 상황을 말한다.

2.3 임계구역

여러 프로세스가 데이터를 공유하며 수행될 때, 각 프로세스에서 공유 데이터를 접근(Access)할 수 있도록 하는 프로그램 코드 부분이다.

여러 프로세스가 동일 자원을 동시에 참조하며 값이 바뀔 위함 가능성이 있는 영역이다.

2.3.1 임계구역 해결 조건

  • 상호 배제(Mutual exclusion)

한 프로세스가 임계구역에 들어가면 다른 프로세스는 임계구역에 들어갈 수 없다.

2.4 세마포어

에츠허르 다익스트라가 제안한 교착상태(DeadLock)에 대한 해법으로 두 개의 원자적(Atomic) 함수로 제어되는 정수 변수로 멀티프로그래밍 환경에서 공유자원에 대한 접근 제어를 하는 방법으로 사용된다.

1개의 공유되는 자원에 제한된 개수의 프로세스 또는 쓰레드만 접근할 수 있도록 한다.

2.4.1 작동 원리

세마포어의 작동 원리는 상호 배제 알고리즘에 기반한다.

<aside> 💡

상호 배제 알고리즘(Mutual Exclusion Algorithm)

동시 프로그래밍에서 공유 불가능한 자원의 동시 사용을 피하기 위해 사용되는 알고리즘, 임계 구역에서 구현된다.

</aside>

일반적으로 세마포어의 값이 0이면 자원에 접근할 수 없도록 블럭하고 0보다 크면 접근함과 동시에 세마포어의 값을 1 감소시킨다.

반대로 종료하고 나갈 때에는 세마포어의 값을 1 증가시켜 다른 프로세스가 접근할 수 있도록 한다.

 

알고리즘

1⃣ 재귀(Recursion)

어떠한 것을 정의하는 과정에서 자기 자신을 참조하는 것

1.1 특징

  • 재귀함수를 구현할 때 탈출 조건(기저 조건)을 정의하지 않으면, 콜스택에 계속 쌓이게 된다.

  • 스택 오버플로우(Stack Overflow) - 콜스택에 메모리 용량을 초과하여 프로세스가 강제 종료되는 현상

  • 팩토리얼(Factorial) - 재귀함수를 사용하면 쉽게 해결 가능한

image

[ Day 7 ]

운영체제

1⃣ 교착상태

두 개 이상의 프로세스나 스레드가 서로 자원을 얻지 못해서 다음 처리를 하지 못하는 상태를 말한다.

즉, 무한히 다음 자원을 기다리게 되는 상태이다.

시스템적으로 한정된 자원을 여러 곳에서 사용하려고 할 때 발생한다.

1.1 교착상태의 발생 이유

공유자원

 

1.2 교착상태의 필요조건

한 가지라도 충족하지 않는다면 교착상태는 발생하지 않는다.

  • 상호배제

한 프로세스가 리소스를 점유했다면 그 리소스는 다른 프로세스에게 공유되면 안된다.

  • 비선점

사용하고 있는 리소스를 다른 프로세스가 뺏을 수 없다.

  • 점유와 대기

  • 원형대기

점유와 대기 상태가 원형 상태인 것을 의미한다.

2⃣ 교착상태 회피

전체자원의 수와 할당된 자원의 수를 기준으로 안정상태와 블안정상태로 나뉜다.

불안정상태에 있더라도 무조건 교착상태에 빠지는 것은 아니다.

2.1 은행원 알고리즘

교착상태(DeadLock)를 방지하는 자원 할당 알고리즘이다.

은행의 대출 방식에서 유래되었는데, 은행이 고객에게 대출을 해줄 때 보유 잔고를 고려하듯, 프로세스에 자원을 할당할 때 시스템이 안정상태를 유지할 수 있는지 판단하는 방식이다.

 

알고리즘

1⃣ 재귀적으로 생각하기

재귀함수는 하위 문제를 기반으로 현재 문제를 해결하는 하향식 계산을 주된 방식으로 사용한다.

1.1 배열의 합

image

1.2 문자열 길이 계산

// 구하려는 문저열 마지막 원소를 제외한 나머지
function strlength(arr){
  if(arr[0] == null) return 0;
  return strlength(arr.slice(0, -1)) +1);

1.3 지수함수

function power(x, n) {
  if(n==0) return 1;
  return power(x, n-1) * x;

[ Day 8 ]

운영체제

1⃣ 컴파일

1.1 프로그래밍 언어

  • 컴파일 언어

개발자가 코드를 작성하고 컴파일하여 0과 1로 된 기계어로 실행파일을 만든다.

개발자가 문법 오류를 일으켰는지 검사를 한다.

  • 인터프리터 언어

개발자가 작성한 코드를 미리 기계어로 만들지 않고 실행 시 코드를 한 줄 씩 해석해 실행한는 언어

미리 검사를 하지 않기 때문에 실행할 때 오류가 날 수도 있고 속도도 컴파일과 비교하면 느리다.

1.2 프로세스의 메모리 구조

코드, 데이터, 힙, 스택으로 나뉜다.

  • 코드

실행해야 할 코드가 들어가는 영역

  • 데이터

전역변수나 배열이 들어가는 영역

스택과 힙 영역은 프로세스가 실행될 때 할당되는 메모리로

  • 스택

지역변수와 함수 관련 값들이 들어감

실행 중에 메모리 공간을 할당할 수 있는 유동적인 공간이다.

1.3 컴파일 과정

image.png

컴파일 과정

  1. 전처리

헤더파일 혹은 매크로를 치환하여 .i파일로 저장 (#include, #define 등)

  1. 컴파일

어셈블리어로 컴파일 후 .s 파일로 저장 ( c, c++ )

  1. 어셈블

어셈플리어를 링커가 읽을 수 있는 목적파일로 변환하여 .o 파일로 저장 (기계어로 최종 번역)

  1. 링킹

목적파일들을 하나로 묶어 실행파일

 

알고리즘

하노이의 탑

1883년 프랑스의 수학자 Édouard Lucas가 처음으로 발표한 게임으로, 재귀함수 예제로 활용된다.

 

image

 

[ Day 9 ]

운영체제

메모리의 종류

휘발성 메모리

정보를 일회성으로 저장하고 삭제하는 메모리를 말한다.

 

1.1 RAM

휘발성 메모리의 대표적인 형태, CPU와의 빠른 데이터 교환을 위해 사용된다.

프로그램 실행, 작업 데이터를 임시로 저장하여 CPU가 빠르게 접근할 수 있게 하는 역할을 한다.

 

1.2 레지스터

CPU 내부에 위치한 가장 빠른 메모리로, 데이터나 명령어의 임시 저장소 역할을 한다.

CPU에서 바로 처리하는 데이터, 즉 명령어 실행 중에 필요한 데이터를 빠르게 저장하고 불러오는데 쓰인다.

 

1.3 캐시 메모리(Cache memory)

CPU와 주 메모리(RAM)간의 속도 차이를 줄이기 위해 사용되는 고속 메모리

자주 사용되는 데이터를 미리 저장하여 CPU의 처리 속도를 향상시키는 역할을 한다.

 

가상 메모리

RAM + HDD

 

알고리즘

정렬 알고리즘(Sorting Algorithm)

정렬이란 데이터를 오름차순이나 내림차순으로 배치하는 것을 말한다.

정렬 시 데이터를 순서에 맞게 배치에 보다 더 쉽고 빠르게 검색할 수 있다.

 

1.1 버블 정렬

서로 인접한 두 요소를 비교하여 정렬하는 알고리즘

인접한 2개의 요소를 비교해서 교환하는 형태이다.

0(n^2)의 시간복잡도를 가진다.

image1.2 선택 정렬

배열에서 최솟값을 찾아 맨 앞부터 둔다.

일반적으로 데이터의 교환이 이동 작업보다 복잡하다.

O(n^2)의 시간복잡도를 가진다.

image

 

2주차를 회고하며..

어떻게 따라가고 있는지도 모르게 주말이 다가왔고 솔직히 내용들을 완벽히 이해한 것 같지는 않다.

발자국을 작성하며 다시 복습을 함으로써 조금은 머릿속에 정리되는 듯 하다.

그러나 신기한게 감자님의 강의가 그림으로 쉽게 알려주시다 보니 당시에 강의해주셨던 그림들이 스쳐지나가며 생각이 난다.

재귀와 하노이의 탑 등 다시 스스로 코드를 작성하며 복기해봐야겠다.

댓글을 작성해보세요.

채널톡 아이콘