블로그
전체 62024. 10. 14.
0
[인프런 워밍업 클럽 CS 2기] 2주차 발자국 - 둘째 주 미션
[ 운영체제 ]Q1. FIFO 스케줄링의 장단점이 뭔가요?A1.장점 : 단순하고 직관적이며, 순차적으로 처리 되기 때문에 일괄처리 시스템에 적합하다.단점 :먼저 들어온 프로세스가 끝나야만 다음 프로세스가 실행될 수 있다.실행시간이 짧고 늦게 도착한 프로세스가 실행시간이 길고 빨리 도착한 프로세스의 작업을 기다려야 한다.I/O 작업이 있는 경우 I/O 작업이 끝날때 까지 CPU 가 쉬게 되므로 CPU 사용률이 떨어진다.Q2. SJF를 사용하기 여러운 이유가 뭔가요?A2. Burst Time이 짧은 프로세스를 우선적으로 실행 시, 상대적으로 Burst Time이 긴 작업은 실행될 기회를 얻지 못하고 계속 대기할 수 있게 되며 프로세스의 종료시간을 예측하기 어려울 수도 있다. 이러한 이유로 SJF 알고리즘은 실제적으로 사용하지 않는다.Q3. RR 스케줄링에서 타임 슬라이스가 아주 작으면 어떤 문제가 발생할까요?A3. 컨텍스트 스위칭이 자주 발생하여 타임 슬라이스에서 실행되는 프로세스의 처리량 보다 컨텍스트 스위칭을 처리하는 양이 훨씬 커진다. 이러한 상황을 ‘오버헤드가 커진다’고 한다.Q4. 운영체제가 MLFQ에서 CPU Bound Process와 I/O Bound Process를 어떻게 구분할까요?A4.CPU를 사용하는 프로세스가 실행하다가 스스로 CPU를 반납하면 CPU 사용이 적은거니 I/O Bound Process 일 확률이 높다.CPU를 사용하는 프로세스가 타임 슬라이스 크기를 오버해서 CPU 스케줄러에 의해 강제로 CPU를 뺏기는 상황이면 CPU 사용이 많은 것이니 CPU Bound Process일 확률이 높다.Q5. 공유자원이란무엇인가요?A5. 프로세스 통신시 공통으로 이용하는 변수나 파일을 의미 한다. 공유 자원은 프로세스의 접근 순서에 따라 결과가 달라질 수 있다.Q6. 교착상태에 빠질 수 있는 조건은 어떤 것들을 충족해야할까요?A6.상호배제 : 어떤 프로세스가 한 리소스를 점유 했다면, 해당 리소스는 다른 프로세스에게 공유 되면 안된다.비선점 : 프로세스 A가 리소스를 점유하고 있을 때, 다른 프로세스는 해당 리소스를 빼앗을 수 없다.점유와 대기 : 어떤 프로세스에서 리소스 A를 가지고 있는 상태에서 리소스 B를 원하는 상태여야 한다.원형 대기 : 점유와 대기를 하는 프로세스들의 관계가 원형을 이루고 있어야 한다.[ 자료구조와 알고리즘 ]Q1. 재귀함수에서 기저조건을 만들지 않거나 잘못 설정했을 때 어떤 문제가 발생할 수 있나요?A1. 기저조건이 없으면 함수는 자기자신을 계속해서 호출하게 되므로 무한루프에 빠지게 되며 스택 오버플로우(Stack Overflow)가 발생한다.Q2. 0부터 입력 n까지 홀수의 합을 더하는 재귀 함수를 만들어보세요.A2.function sumOdd(num){ if(num
알고리즘 · 자료구조
・
인프런워밍업클럽
・
자료구조
・
알고리즘
・
CS
2024. 10. 14.
1
[인프런 워밍업 클럽 CS 2기] 2주차 발자국 - 자료구조/알고리즘
[ Section 3. 알고리즘 ]1. 재귀(recursion)재귀(recursion)어떤것을 정의할 때 자기 자신을 참조하는 것재귀함수란함수 내부에서 자기 자신(함수)를 호출하여 실행하는 함수→ 함수를 정의할 때 재귀적으로 정의된 함수를 재귀함수 라고 부른다.기저조건(Base Case)재귀 함수의 탈출 조건, 재귀 호출을 종료하는 조건을 의미한다.기저 조건이 없다면 함수는 계속해서 자기 자신을 호출하게 되므로, 무한 루프에 빠져 스택 오버플로우(Stack Overflow)가 발생한다.콜 스택(Call Stack)메모리 영역에서 Stack의 한 부분을 의미하며, 재귀 함수는 이 콜 스택을 사용해 실행된다.재귀함수를 사용하는 케이스for문에서 재귀함수를 사용하는 것은 비효율적이다.조금 복잡한 로직들을 구현할 때 재귀함수를 사용 한다. ex) 팩토리얼 계산2. 재귀적으로 생각하기재귀함수의 사용패턴 - 1. 반복실행재귀함수를 반복실행하여 for문 처럼 사용할 수 있다.그러나 재귀함수로 반복문을 실행하는것은 성능이 좋지 않다.재귀함수의 사용패턴 - 2. 하위문제의 결과 기반으로 현재 문제 계산재귀함수는 하위문제의 결과를 기반으로 현재 문제를 해결하는 하향식 계산 방식을 사용한다.재귀함수에 상향식 계산 방식을 사용하긴 하지만 재귀함수는 하향식 계산 방식을 사용하는데 주로 쓰인다.상향식 계산현재 문제 결과를 기반으로 상위 문제를 해결하는 방식하향식 계산하위 문제 결과를 기반으로 현재 문제를 해결하는 방식3. 재귀 - 하노이 탑재귀함수를 이용하여 하노이탑을 하향식 계산 방식으로 접근// ch03. 재귀 - 하노이 탑 // ex. 기둥 A 에 있는 원반 3개를 기둥 C 로 이동하려는 경우 // 1) 원반 3이 기둥 C로 옮겨 져야 함 -> [하위 문제] : 원반 1, 2가 기둥 B에 옮겨져야 한다. // 1-1) 원반 1, 2가 기둥 B에 옮겨져야 한다. -> [하위 문제] : 원반 2가 기둥 B에 옮겨져야 한다. // 1-1-1) 원반 2가 기둥 B에 옮겨져야 한다. -> [하위 문제] : 원반 1이 기둥 C에 옮겨져야 한다. function hanoi(count, from, to, temp) { // 3, A, C, c if(count === 0) return; hanoi(count - 1, from, temp, to); // 2, A, B, C console.log(`원반 [ ${count} ]를 [ ${from} ]에서 [ ${to} ]로 이동`); hanoi(count - 1, temp, to, from); // 2, B(temp), C(to), A(from) } // 첫번째 매개변수 : 원반의 개수(count) // 두번째 매개변수 : 원반들이 처음 꽂혀있는 기둥(from) // 세번째 매개변수 : 원반들이 최종적으로 꽂힐 기둥(to) // 네번째 매개변수 : 원반들이 이동을 위해 임시로 사용할 기둥(temp) hanoi(3, "A", "C", "B"); 4. 정렬 - 버블 정렬(Bubble Sort)버블 정렬(Bubble Sort)이란배열의 무작위 순서를 정렬할 때, 앞의 원소와 뒤의 원소를 비교하며 순서를 정렬하는 방식이다.배열의 모든 원소의 앞, 뒤 원소를 비교한다. → 맨 마지막 원소는 가장 큰 원소가 위치한다.정렬된 마지막 원소를 제외하고 나머지 원소의 앞, 뒤 원소를 비교한다.정렬은 배열 길이 - 1 만큼 실행한다.// ch04. 정렬 - 버블정렬(Bubble Sort) function BubbleSort(arr) { console.log(`arr.length ===> [${arr.length}]`); // 자리의 교체는 arr.length -1 만큼 진행 for(let i = 0; i ${arr[j]}`); console.log(`3) arr[j+1] 값 ===> ${arr[j+1]}`); if(arr[j] > arr[j + 1]){ // 앞의 원소값이 뒤의 원소값 보다 큰 경우 console.log(`4) arr[j]값이 arr[j+1] 값 보다 큽니다! ${arr[j]} > ${arr[j+1]}`); let temp = arr[j]; // 1) 앞의 원소 값을 임시로 저장 arr[j] = arr[j + 1] // 2) 뒤의 원소 값을 앞의 원소값으로 변경 arr[j + 1] = temp; // 3) 뒤의 원소 값을 임시로 저장했던 값으로 변경 } console.log(`5) ${arr}`); } } } 버블 정렬의 성능버블정렬의 성능을 수학식으로 풀어쓰면 등차수열의 합과 같다.이때 빅 오는 O(n²)이 된다. 데이터가 증가하면 계산량이 증가하여 성능이 떨어지므로 복잡한 시스템에 적합하지 않은 계산법이다.버블 정렬의 장단점장점단순하고 직관적이라 구현이 쉬운 알고리즘이다.단점계산량이 증가시 성능이 떨어지기 때문에 복잡한 시스템에 적합하지 않다.5. 정렬 - 선택 정렬(Selection Sort)선택 정렬이란?정렬되지 않은 영역의 원소들을 순회하며 제일 작은 값을 찾아 순회 범위의 첫번째 원소에 위치 시키는 정렬 알고리즘선택 정렬의 성능선택 정렬의 빅 오는 O(n²)이 된다. 버블 정렬과 마찬가지로 성능이 떨어지므로 복잡한 시스템에 적합하지 않은 계산법이다.선택 정렬의 장단점장점단순하고 직관적이라 구현이 쉬운 알고리즘이다.단점계산량이 증가시 성능이 떨어지기 때문에 복잡한 시스템에 적합하지 않다.
알고리즘 · 자료구조
・
인프런워밍업클럽
・
알고리즘
・
자료구조
・
CS
2024. 10. 14.
1
[인프런 워밍업 클럽 CS 2기] 2주차 발자국 - 운영체제
5. SJF (Shortest Job First)Burst Time(연산 시간)이 짧은 프로세스를 먼저 실행하여 평균 대기 시간을 줄이는 알고리즘Burst Time이 짧은 프로세스를 우선적으로 실행시, 상대적으로 Burst Time이 긴 작업은 실행될 기회를 얻지 못하고 계속 대기할 수 있게 되며 프로세스의 종료시간을 예측하기 어려울 수도 있다. 이러한 이유로 SJF 알고리즘은 실제로 사용하지 않음 6. RR (Round Robin)한 프로세스에게 일정시간을 할당하고 할당된 시간이 종료되면 강제로 다른 프로세스에게 일정시간만큼 CPU를 할당한다. 강제로 CPU를 뺏긴 프로세스는 큐의 맨 뒷부분으로 밀려난다.FIFO 알고리즘과 RR 알고리즘의 평균 대기시간이 비슷한 경우 오버헤드가 큰 RR 알고리즘이 비효율 적이다.RR 알고리즘은 컨텍스트 스위칭 발생이 있기 때문RR 알고리즘의 성능은 타임 슬라이스의 값에 따라 달라짐타임 슬라이스/타임 퀀텀RR 알고리즘에서 프로세스들에게 부여되는 일정 시간타임슬라이스가 크게 설정된 경우FIFO 알고리즘과 다를바가 없기 때문에 비효율적타임슬라이스가 작게 설정된 경우 오버헤드가 너무 커진다.오버헤드가 커지는 상황→ 컨텍스트 스위칭이 자주 발생하여 타임 슬라이스에서 실행되는 프로세스의 처리량 보다 컨텍스트 스위칭을 처리하는 양이 훨씬 커짐최적의 타임 슬라이스를 결정하는 방법사용자가 느끼기에 타임슬라이스가 너무 크지 않아야 함프로세스가 동시에 실행되는 것처럼 느껴저야 함오버헤드가 너무 크지 않아야 함 7. MLFQ(Multi Level Feedback Queue)오늘날 쓰이는 주류 알고리즘이며, RR의 업그레이드 된 알고리즘CPU 사용률과 I/O 사용률이 좋게 나오는 작은 크기의 타임슬라이스를 선택한다.CPU Bound Process 에게는 타임 슬라이스를 크게 주며 우선 순위가 낮은 큐에 배치한다.I/O Bound Process 에게는 타임 슬라이스를 작게 주며 우선 순위가 높은 큐에 배치한다.CPU를 사용하는 프로세스가 실행하다가 스스로 CPU를 반납하면 CPU 사용이 적은거니 I/O Bound Process 일 확률이 높다.CPU를 사용하는 프로세스가 타임 슬라이스 크기를 오버해서 CPU 스케줄러에 의해 강제로 CPU를 뺏기는 상황이면 CPU 사용이 많은 것이니 CPU Bound Process일 확률이 높다.큐의 우선순위 중 우선순위가 높으면 타임슬라이스가 적고 우선순위가 낮을수록 타임 슬라이스 크기가 커진다.어떤 프로세스가 타임 슬라이스 크기를 오버해서 강제로 CPU를 뺏긴다면 해당 프로세스는 원래 있던 큐보다 우선순위가 더 낮은 큐로 이동하게 되고 타임 슬라이스가 조금 더 커진다.→ 다음 실행시에도 타임 슬라이스가 부족하면 다음엔 우선순위가 더 낮은 큐로 이동하게 되어 더 큰 타임 슬라이스를 할당받게 된다.우선순위가 낮아질 수록 타임슬라이스를 무한초로 할당 받게 되어 FIFO 처럼 연속적으로 작업을 마칠 수 있게 됩니다.[ Section 4. 프로세스 동기화 ]1. 프로세스 간 통신프로세스간 통신의 종류1) 파일과 파이프를 이용한 통신파일을 이용한 통신하나의 파일을 여러 프로세스가 같이 읽고 쓰는 방식파이프를 이용한 통신운영체제가 구축한 파이프를 이용하여 프로세스가 통신하는 방식2) 하나의 프로세스 내부에서 쓰레드를 이용한 통신하나의 프로세스 내부에 존재하는 여러 쓰레드는 스택을 제외한 코드, 데이터, 힙 영역을 공유하고 스택만 자신의 것을 가지고 있다.데이터 영역의 전역 변수나, 힙 영역을 이용하여 쓰레드 간 통신이 가능하다.3) 네트워크를 이용한 통신운영체제가 제공하는 소켓 통신다른 컴퓨터에 존재하는 함수를 호출하는 RPC(원격 프로시저 호출)를 이용해 통신2. 공유자원과 임계구역공유자원이란?프로세스 통신시 공통으로 이용하는 변수나 파일프로세스의 접근 순서에 따라 결과가 달라질 수 있다.동기화 문제프로세스 통신시 공유자원의 연산 결과를 예측 할 수 없고 어떤 프로세스가 먼저 실행될지 예측 할 수 없는 문제임계구역(Critical Section이란?여러 프로세스가 동시에 사용하면 안되는 영역을 정의한 구역경쟁조건(Race Condition)공유자원을 서로 사용하기 위해 경쟁하는 것상호 배제(Mutual Exclusion)임계구역 문제를 해결하기 위해 필요한 매커니즘상호 배제의 요구 사항임계 영역엔 동시에 하나의 프로세스만 접근한다.여러 요청에도 하나의 프로세스의 접근만 허용한다.임계구역에 들어간 프로세스는 빠르게 나와야 한다.3. 세마포어상호배제의 매커니즘 중 하나이다.세마포어는 실제로 정수형 변수이다.세마포어를 사용하면 공유자원에 여러 프로세스가 동시에 접근하지 못하기 때문에 동기화 문제가 발생하지 않는다.wait() 함수와 signal() 함수 사용세마포어는 공유 자원의 개수만큼 가질 수 있다.세마포어 사용의 단점wait() 함수와 signal() 함수 사용 순서가 꼬일 경우 세마포어를 잘못 사용할 가능성이 있다.4. 모니터세마포어의 단점을 해결한 상호배제 매커니즘운영체제가 처리하는 것이 아니라 프로그래밍 언어 차원에서 지원하는 방법ex.) 자바에서 synchronized키워드가 붙은 함수들은 여러 프로세스에서 동시에 실행할 수 없다.모니터가 완벽하게 구현된 경우 프로그래머는 세마포어 처럼 wait() 함수와 signal() 함수를 임계 영역에 감싸지 않아도 돼어 편리하고 안전하게 코드를 작성할 수 있다.[ Section 5. 데드락 ]1. 데드락이란? (feat. 식사하는 철학자)교착상태(데드락)여러 프로세스가 서로 작업이 끝나기를 기다리다 아무도 작업을 진행하지 못하는 상태교착상태가 발생하는 이유는 공유자원 때문이며, 어떤 자원을 여러개의 프로세스가 공유하지 않는 경우 교착상태는 발생하지 않는다.교착상태의 필요조건1. 상호배제어떤 프로세스가 한 리소스를 점유 했다면, 해당 리소스는 다른 프로세스에게 공유가 되면 안된다.2) 비선점프로세스 A가 리소스를 점유하고 있을 때, 다른 프로세스는 해당 리소스를 빼앗을 수 없다.3) 점유와 대기어떤 프로세스에서 리소스 A를 가지고 있는 상태에서 리소스 B를 원하는 상태여야 한다.4) 원형 대기점유와 대기를 하는 프로세스들의 관계가 원형을 이루고 있어야 한다.2. 데드락 해결 (feat. 은행원 알고리즘)교착상태 해결방법교착상태 회피(Deadlock avoidance)프로세스에게 교착상태가 발생하지 않는 수준의 자원을 할당전체 자원의 수와 할당된 자원의 수를 기준으로 안정 상태(Safe state)와 불안정 상태(Unsafe state)로 나눈다.운영체제는 안정 상태를 유지하려 노력하며, 불안정 상태에 빠지면 교착상태에 빠질 확률이 높아진다.은행원 알고리즘(Banker’s algorithm)은행의 여윳돈과 사업가들에게 빌려준 돈들을 보고 대출 가능한 상황(안전상태)인지 확인하고 빌려준다.운영체제에서 은행원 알고리즘 구현운영체제는 자기가 가지고 있는 시스템의 총 자원을 파악한다.프로세스는 자기가 필요한 자원의 최대 숫자(최대 요구 자원)를 운영체제에게 알려준다.안정 상태불안정 상태순환구조가 발생한 그래프 → 교착상태 발생교착상태 검출 방법(1) 가벼운 교착 상태 검출타이머를 이용하여 프로세스가 동작하지 않는 경우 교착상태에 빠진것으로 간주하고 교착상태를 해결한다.마지막으로 저장했던 체크포인트로 롤백하여 교착상태를 해결한다.(2) 무거운 교착 상태 검출자원 할당 그래프를 이용하여 현재 운영체제에서 프로세스가 어떤 자원을 사용하는지 지켜보고 교착상태가 발생하면 해결한다.교착상태를 검출한 경우 교착상태를 일으킨 프로세스를 강제로 종료하고, 다시 실행 시킬때 체크포인트로 롤백을 시킨다.이 방식은 운영체제가 지속적으로 ‘자원 할당 그래프’를 유지, 검사 해야 하기 때문에 오버헤드가 발생한다.가벼운 교착 상태 검출방식 보다 억울하게 종료되는 프로세스는 발생하지 않는다.[ Section 6. 쉬어가기 ]1. 컴파일과 프로세스작성한 프로그램 코드가 프로세스가 되고 메모리에 할당되는 전반적인 과정프로그래밍 언어컴파일 언어개발자가 작성한 코드를 컴파일 과정을 거쳐 실행 가능한 기계어로 변환컴파일 과정에서 문법 오류를 잡아낼 수 있다.C, C++, C# 등인터프리터 언어개발자가 작성한 코드를 한줄씩 해석하며 실행하는 언어컴파일 과정이 없어 실행시 오류가 발생 할 수 있고, 속도도 컴파일 언어와 비교하면 느리다.JS, Python, Ruby 등프로세스의 구조Code 영역실행해야 될 코드가 들어가는 영역Data 영역전역 변수나 배열이 들어가는 영역Stack 영역, Heap 영역 : 프로세스가 실행될 때 할당되는 메모리Stack 영역지역변수와 함수 관련 값들이 들어가는 영역Heap 영역실행 중 메모리 공간을 할당할 수 있는 유동적인 공간컴파일 언어로 작성된 파일이 프로세스가 되는 과정코드 작성컴파일러로 작성한 코드를 컴파일컴파일 과정을 거쳐 실행 파일이 생성된다.사용자가 프로그램을 실행시키면 운영체제가 프로세스를 만든다.운영체제는 실행파일에 있는 코드 영역과 데이터 영역을 가져와 프로세스의 코드 영역과 데이터 영역에 넣어주고 빈 상태의 스택과 힙을 할당한다.PCB를 만들어 관리가 가능하도록 하고, 프로그램 카운터(실행할 명령어의 주소)를 생성한 프로세스의 코드 영역의 첫번째 주소로 설정한다.운영체제 CPU 스케줄링에 따라 프로세스가 실행되다 작업을 마친다. [ Section 7. 메모리 ]1. 메모리 종류컴퓨터의 여러 종류 메모리레지스터CPU에 존재하며 가장 빠른 기억 장소컴퓨터의 전원이 꺼지면 데이터가 사라진다. = 휘발성 메모리32bit CPU, 64bit CPU → 32bit, 64bit는 레지스터의 크기를 말한다.CPU는 연산시 메인메모리(RAM) 에 있는 값을 레지스터로 가져와 연산하고 다시 메인메모리(RAM)에 저장한다.메인메모리의 값을 레지스터로 옮기려면 오래 걸리기 때문에 필요할 것 같은 데이터를 미리 캐시에 저장한다.메인메모리운영체제와 프로세스가 올라가는 공간전원이 공급되지 않으면 데이터가 지워진다. = 휘발성 메모리하드디스크나 SSD보다 속도는 빠르지만 가격이 비쌈 → 데이터 저장 X, 실행중인 프로그램만 올린다.보조저장장치(SSD, 하드디스크)가격이 저렴하고 전원이 공급되지 않아도 데이터가 지워지지 않는 비 휘발성 메모리2. 메모리와 주소운영체제는 메모리(메인 메모리, RAM) 관리를 위해 1바이트(8bit) 크기로 구역을 나누고 숫자를 매긴다. 이 숫자를 ‘주소’ 라고 부른다.32bit CPU 와 64bit CPU64bit CPU가 32bit CPU 보다 한번에 처리할 수 있는 양이 많기 때문에 속도가 더 빠르다.32bit CPU레지스터 크기: 32bitALU(산술논리연산장치) : 32bit(데이터가 이동하는) 버스 : 32bitCPU가 다룰 수 있는 메모리 : 2³² = 4GB64bit CPU레지스터 크기: 64bitALU(산술논리연산장치) : 64bit(데이터가 이동하는) 버스 : 64bitCPU가 다룰 수 있는 메모리 : 2⁶⁴물리주소와 논리 주소물리 주소 공간컴퓨터를 연결하면 0x0번지부터 시작하는 주소 공간논리 주소 공간사용자 관점에서 바라본 메모리 공간사용자는 논리주소로 물리주소에 접근 가능경계 레지스터하드웨어 적으로 운영체제 공간과 사용자 공간을 나눈다.CPU 내부에 존재하며 메모리 관리자가 사용자 프로세스가 경계 레지스터의 값을 벗어났는지 검사하고 벗어난 경우 그 프로세스를 종료시킨다.절대 주소와 상대 주소절대 주소실제 프로그램이 올라간 메모리 주소이며 메모리 관점에서의 절대 주소‘물리 주소 공간’ 이라 부른다.상대 주소사용자가 바라본 주소이며 실제 메모리 주소가 아니다.‘논리 주소 공간’이라 부른다.재배치 레지스터메모리 관리자는 CPU가 요청한 메모리 주소 값과 재배치 레지스터에 저장된 값을 더한 메모리 주소에 접근해서 데이터를 가져온다.재배치 레지스터에는 프로그램의 시작 주소가 저장되어 있다.재배치 레지스터 덕분에 모든 사용자 프로세스는 0x0번지 부터 시작한다는 가정을 사용할 수 있고, 시작 영역이 변경되어도 재배치 레지스터만 변경해주면 되는 장점이 있다.3. 메모리 할당방식메모리 오버레이(memory overlay)메모리 보다 큰 프로그램 실행 시 당장 실행할 부분만 메모리에 올리고, 나머지는 하드디스크 내부의 스왑 영역에 저장하는 기법스왑과정이 있기 때문에 조금 느리다.가변 분할 방식 (세그멘테이션)프로세스의 크기에 따라 메모리를 나누는 방식한 프로세스가 메모리의 연속된 공간에 할당되기 때문에 “연속 메모리 할당”이라고 한다.가변 분할 방식의 장/단점장점메모리의 연속된 공간에 할당되기 때문에 *내부 단편화가 없다*내부 단편화 : 크기가 더 크게 할당되어 낭비되는 공간단점외부 단편화 발생고정 분할 방식 (페이징)프로세스 크기와 상관없이 메모리를 정해진 크기로 나누는 방식한 프로세스가 메모리에 분산되어 할당되기 때문에 “비연속 메모리 할당” 이라고 한다.고정 분할 방식의 장/단점장점구현이 간단, 오버헤드가 적다.단점작은 프로세스도 큰 공간에 할당되어 공간이 낭비되는 내부 단편화가 발생외부 단편화 문제메모리를 할당 할 수 있는 공간이 충분함에도 연속된 공간에 프로세스를 할당할 수 없으면 할당하지 못하는 것내부 단편화 문제프로세스의 크기가 분할된 공간의 크기보다 작기 때문에 내부에 빈 공간이 생겨 낭비된다.분할되는 크기를 조절해서 내부 단편화를 최소화 한다.버디 시스템가변 분할 방식과 고정 분할 방식을 혼합해 단점을 최소화 함2의승수로 메모리 분할하여 메모리를 할당하는 방식버디 시스템의 장점외부 단편화 방지를 위한 메모리 공간 확보가 간단내부 단편화가 발생하긴 하지만 많은 공간의 메모리 낭비가 발생하지는 않음
알고리즘 · 자료구조
・
인프런워밍업클럽
・
운영체제
・
CS
2024. 10. 06.
0
[인프런 워밍업 클럽 CS 2기] 1주차 발자국 - 첫째 주 미션
[ 운영체제 ]Q1.while(true){ wait(1); // 1초 멈춤 bool isActivated = checkSkillActivated(); // 체크 } 위 코드는 1초 마다 플레이어가 스킬을 사용했는지 체크하는 코드입니다. 이 방식은 폴링방식입니다. 1초마다 체크하기 때문에 성능에 좋지 않습니다. 이를 해결하기 위한 방식으로 어떤 걸 이용해야 할까요?A1. 주기적으로 명령의 완료여부를 체크하는 폴링방식은 CPU를 낭비하는 단점이 있으며, 이를 해결하기 위해 인터럽트 방식을 이용하는 것이 좋습니다.인터럽트 방식은 CPU가 다른 작업을 수행하고 특정 이벤트가 발생하면 해당 이벤트를 처리하기 위해 인터럽트 서비스 루틴(ISR)이 실행됩니다. 인터럽트 방식을 사용하면 CPU를 더 효율적으로 사용할 수 있게 됩니다. Q2. 프로그램과 프로세스가 어떻게 다른가요?A2. 프로그램은 저장장치에 저장된 명령문의 집합체를 말하며 실행되지 않은 정적인 상태입니다.프로세스는 저장된 프로그램이 메모리에 로드되고 CPU에서 실행중인 동적인 상태를 의미합니다.컴퓨터 관점에서 프로그램은 저장장치만 사용하는 수동적 존재이며, 프로세스는 메모리/CPU사용, 입/출력 작업을 진행하는 능동적 존재입니다. Q3. 멀티프로그래밍과 멀티프로세싱이 어떻게 다른가요?A3. 멀티프로그래밍은 메모리에 여러가지 프로그램을 동시에 적재하여 실행하는 방식이며, 단일 CPU가 여러 프로세스를 번갈아가며 실행하는 것을 의미합니다.멀티프로세싱은 물리적으로 여러 개의 CPU를 사용하여 동시에 여러 프로세스를 실행하는 방식입니다. 여러 개의 CPU가 병렬적으로 동작하여 프로세스를 동시에 처리할 수 있으며, 단일 CPU 처리에 비해 더 높은 성능과 처리량을 기대할 수 있습니다. Q4. 운영체제는 프로세스를 관리하기 위해서 어떤 것을 사용하나요?A4. 운영체제는 프로세스를 관리하기 위해 프로세스의 다양한 정보를 포함한 PCB(Process Control Block)를 사용하여 프로세스를 관리합니다. Q5. 컨텍스트 스위칭이란 뭔가요?A5. 기존에 실행중인 프로세스의 상태를 저장하고 새로운 프로세스의 상태로 전환하는 작업을 의미합니다.이 과정에서 CPU는 이전 프로세스의 정보를 PCB에 저장하고 새 프로세스의 PCB를 가져와서 프로세스를 실행합니다.컨텍스트 스위칭은 CPU 점유 시간 초과, I/O 요청 발생, 인터럽트 발생 등 다양한 경우에 발생합니다.컨텍스트 스위칭 발생시 시스템의 오버헤드를 증가시킬 수 있으며 잦은 컨텍스트 스위칭으로 시스템 성능이 저하될 수 있습니다.[ 자료구조와 알고리즘 ]Q1. 여러분은 교실의 학생 정보를 저장하고 열람할 수 있는 관리 프로그램을 개발하려고 합니다. 이 때 여러분이라면 학생의 정보를 저장하기 위한 자료구조를 어떤 걸 선택하실 건가요? 이유를 함께 적어주세요.A1.교실의 학생 정보를 데이터의 관점으로 바라봤을때 데이터의 추가, 삭제가 발생할 수 있습니다.데이터 추가 : 새로운 전학생이 온 경우데이터 삭제 : 기존학생이 전학을 간 경우→ 배열, 스택(Stack), 큐(Queue) , 덱(Deq)의 자료구조는 적절하지 않습니다.교실의 학생 중 동명이인이 있을 수 있습니다. → 셋(Set)의 자료구조는 적절하지 않습니다.따라서 연결리스트나 해시테이블의 자료구조를 사용하는것이 적절하다고 생각합니다.좋은 해시 함수를 사용할 수 있는 상황이라면 해시테이블을 선택하겠습니다. Q2. 여러분은 고객의 주문을 받는 프로그램을 개발하려고 합니다. 주문은 들어온 순서대로 처리됩니다. 이 때 여러분이라면 어떤 자료구조를 선택하실 건가요? 이유를 함께 적어주세요.고객의 주문을 순차적으로 처리해야 하기 때문에 FIFO (First In First Out) 구조를 가진 큐 (Queue) 자료구조를 선택하는것이 적절하다고 생각합니다.
알고리즘 · 자료구조
・
인프런워밍업클럽
・
자료구조
・
알고리즘
・
CS
2024. 10. 06.
1
[인프런 워밍업 클럽 CS 2기] 1주차 발자국 - 자료구조/알고리즘
[ Section 1. 개요 ]1. 자료구조와 알고리즘이란?프로그램은 자료구조와 알고리즘으로 이루어진다.프로그램 작성 시 적절한 자료구조를 선택하여 데이터를 저장하고, 자료구조에 맞는 알고리즘을 사용해 데이터를 가공하여 원하는 결과를 도출한다.1) 자료구조자료구조란?데이터가 어떤 구조로 저장되고 어떻게 사용되는지를 나타낸다.단순한 자료구조 : 변수, 배열자료구조에 따라 처리방법이 달라지며 데이터의 변경시 코드가 더 단순해질 수도 있다.2) 알고리즘알고리즘이란?어떤 문제를 해결하기 위한 확실한 방법데이터가 어떤 자료구조를 하고 있는지에 따라 알고리즘이 달라진다.알고리즘은 자료구조에 많은 영향을 받는다.한가지 자료구조에 대해서도 여러가지 알고리즘이 있을 수 있다. 2. 시간복잡도1) 시간복잡도특정 알고리즘이 어떤 문제를 해결하는데 걸리는 시간의 효율성을 나타내는 척도를 말한다.알고리즘의 성능을 평가할 때 처리 속도를 중요한 기준으로 사용하지만, 컴퓨터의 사양에 따라 실제 속도는 달라질 수 있다.따라서, 실제 시간을 측정하는 것보다 알고리즘에서 성능에 영향을 미치는 핵심 연산을 기반으로 실행 시간을 예측하는 방식으로 시간복잡도를 평가한다.2) 시간복잡도 평가시 점근 표기법(Asymptotic Notation)의 사용3가지 종류의 표기법이 사용된다.Big-Ω, Big-O, Big-Θ표기법중 Big-O와 Big-Θ를 주로 사용하며, 가장 많이 사용되는것은 Big-O 이다.1) 빅 오메가 표기법 (Big-Ω, Big-Omega Notation, Ω)최선의 경우를 나타내는 표기법2) 빅 오 표기법 (Big-O, Big-O Notation, O)최악의 경우를 나타내는 표기법3) 빅 세타 표기법 (Big-Θ, Big-Theta Notation, Θ)평균적인 경우 또는 정확한 시간 복잡도를 나타낸다.3) 시간복잡도 분류(1) 선형시간 알고리즘 O(n)입력량이 많아지는 경우 계산량이 증가하므로 O(n)의 알고리즘은 선형시간 알고리즘이라고 부른다.(2) 상수시간 알고리즘 O(1)입력량의 크기에 상관없이 상수의 시간이 걸린다는 의미로 계산량이 꼭 한 번일 필요는 없다.4) 빅 오(Big-O) 표기법의 특징빅 오(Big-O) 표기법은 입력의 크기에 따라 알고리즘의 계산량이 어떻게 변하는지를 나타내는 척도를 제공한다.빅 오(Big-O) 표기법에서는 성능에 가장 큰 영향을 미치는 항만 표기한다.ex) n**²** + 2n + 100 이라는 성능을 가진 알고리즘의 빅 오 표기법은 O(n**²**) 이다.빅 오(Big-O) 표기법에서 상수는 성능에 큰 영향을 미치지 않으므로 제거한다.ex) 3n**²** + 100n 성능의 알고리즘을 빅 오 표기법으로 나타내면 O(n**²**) 이다.[ Section 2. 자료구조 ]1. 배열(1) 배열의 특징일반적으로 프로그래밍 언어에서 배열을 선언할 때 크기를 지정해야 하며, 운영체제는 크기에 맞는 연속된 메모리 공간을 할당한다.운영체제는 배열의 시작 주소만 기억하며, 인덱스를 이용해 O(1)의 성능으로 데이터를 참조할 수 있다.배열을 읽기/쓰기 와 같은 참조에서 빠른 성능을 보인다.배열의 크기를 확장할 수 없기 때문에 데이터 추가/제거 시 성능 저하가 발생한다.배열을 확장하려면 새로운 메모리 공간을 할당하고 기존 데이터를 복사해야 함.배열을 미리 크게 선언하거나 사용하지 않는 공간이 있을 경우 메모리 공간이 낭비될 수 있다.(2) 배열의 장단점장점 : 인덱스 접근에서 빠른 성능(O(1))을 제공한다.단점 : 크기를 미리 정해야 하며, 삽입/삭제가 비효율적이고, 메모리 낭비 가능성이 있다. 2. 연결 리스트 (Linked List)연결 리스트 (Linked List)연결 리스트는 노드(Node)라는 것을 만들어서 수행한다.첫 노드의 주소만 알고 있으면 다른 모든 노드에 접근할 수 있다.(1) 장점배열처럼 초기 크기를 알아야 하는 단점이 없다빈 메모리 공간 아무 곳에 데이터를 생성하고 연결만 해주면 됨데이터 삽입시 다음 가리키는 노드만 바꿔주면 되기 때문에 배열보다 작업이 간단함(2) 단점데이터를 찾을때 연속된 노드를 순회하여 데이터를 참조해야 함연결 리스트에서 데이터 참조는 O(n)의 성능3. 스택 (Stack)스택은 마지막에 삽입된 데이터가 먼저 제거(LIFO, Last In First Out)되는 구조를 가진다.데이터의 삽입과 제거는 항상 맨 앞(head/top)에서만 이루어진다.스택은 LIFO 규칙만 충족하면 어떤 자료구조로도 구현할 수 있다.FILO (First In Last Out)먼저 들어간 데이터가 나중에 나오는 규칙4. 큐 (Queue)먼저 들어온 데이터가 먼저 나가는(FIFO, First In First Out) 구조를 가진다.데이터의 삽입은 tail(rear)에서, 제거는 head(front)에서 이루어진다.FIFO (First In First Out)먼저 들어간 데이터가 먼저 나오는 규칙운영체제에서 FIFO 스케줄링이 사용된다.운영체제가 프로세스의 작업 요청을 들어온 순서대로 큐에 넣고 CPU가 순서대로 꺼내어 처리한다.5. 덱 (Deq)데이터의 삽입과 제거를 head와 tail 두 군데서 자유롭게 할 수 있는 자료구조덱을 이용하여 스택과 큐를 전부 구현할 수도 있다.덱 (Deq)의 추상 자료형printAll - 모든 데이터 출력addFirst - head에 데이터 삽입하는 함수 removeFirst - head에서 데이터 제거하는 함수 addLast - tail에 데이터 삽입하는 함수 removeLast - tail에서 데이터 제거하는 함수 isEmpty - 리스트가 비었는지를 알려주는 함수6. 해시테이블 (Hash Table)Key를 Hash 함수를 통해 특정 위치에 매핑하여 데이터를 저장하는 자료구조이다.해시와 테이블이 결합된 형태로, 해시 함수를 사용하여 테이블의 인덱스를 생성한다.프로그래밍 언어에 따라 다양한 이름으로 불린다.예 : 해시(Hash), 맵(Map), 해시맵(HashMap), 딕셔너리(Dictionary)데이터 읽기, 삽입, 수정, 삭제를 평균적으로 O(1)의 성능으로 처리할 수 있다.해시 테이블에서의 충돌 (Collision)여러 Key가 동일한 Hash 값으로 매핑될 경우 충돌이 발생한다.해시 테이블의 장단점(1) 장점빠른 데이터 읽기, 삽입, 삭제 성능을 제공한다.(2) 단점공간의 효율성이 떨어질 수 잇다.미리 할당해야 하는 메모리 공간이 많다.해시 함수에 따라 메모리 낭비가 발생할 수 있다.해시 함수의 품질에 따라 성능에 큰 영향을 미치므로 좋은 해시 함수의 구현이 필수적이다.7. 셋 (Set)데이터의 중복을 허용하지 않는 자료구조중복되지 않는 값 저장시 유용함해시 테이블을 이용하기 때문에 해시 셋(Hash Set) 이라고도 불리며 쉽게 구현 가능해시 테이블의 value 값은 사용하지 않고 key 만 사용해서 구현한다.key 가 key 임과 동시에 데이터로 사용됨셋 (Set)의 추상자료형add(data) - 셋에 데이터를 추가하는 기능매개변수로 전달되는 data는 key이자 데이터isContain(data) - 셋에 해당 데이터가 있는지 체크하는 기능해당 데이터가 셋에 있다면 true, 없다면 false를 리턴한다.remove(data) - 셋에 데이터를 제거하는 기능제거할 data를 매개변수로 전달하며 해시 테이블에서 해당 key를 제거clear() - 셋을 비우는 기능isEmpty() - 셋이 비었는지 검사하는 기능printAll() - 테스트를 위해 셋의 모든 데이터를 출력하는 기능
알고리즘 · 자료구조
・
인프런워밍업클럽
・
알고리즘
・
자료구조
・
CS
2024. 10. 06.
1
[인프런 워밍업 클럽 CS 2기] 1주차 발자국 - 운영체제
[ Section 1. 운영체제 들어가기 ]1. 운영체제 개요운영체제가 사용되는 곳개인용 컴퓨터 : Windows, Mac OS스마트폰, 태블릿 : 안드로이드, iOS네비게이션, 스마트 워치, 냉장고, 세탁기 : 임베디드 시스템컴퓨터는 운영체제 없이 동작 가능할까?→ 가능하다. 그러나 운영체제가 없는 경우 기본적으로 세팅된 기능만 사용 가능하며 추가적인 기능을 사용할 수 없다.예시) ☎ : 전화기는 기본으로 제공되는 기능만 사용가능 📱 : 스마트폰은 운영체제가 내장되어 다양한 기능들을 추가적으로 사용할 수 있음운영체제가 하는 일프로세스 관리, 메모리 관리, 하드웨어 관리, 파일 시스템 관리 3. 운영체제의 구조커널프로세스, 메모리, 저장장치를 관리하는 운영체제의 핵심 기능사용자와 커널간의 인터페이스시스템 콜→ 시스템 콜은 사용자와 커널 간의 상호작용을 보호하기 위한 인터페이스이며, 사용자와 애플리케이션은 시스템 콜을 통해 커널과 소통한다.GUI/CLI 방식GUI (Graphical User Interface): Windows, Mac OS와 같이 그래픽 기반의 사용자 인터페이스를 제공한다.CLI (Command Line Interface): 텍스트를 사용하여 커널에 접근하며, 주로 Linux/Unix 시스템에서 사용한다.하드웨어와 커널의 인터페이스 하드웨어와 커널의 인터페이스드라이버→ 드라이버는 하드웨어와 커널 간의 상호작용을 위한 인터페이스이다. 4. 컴퓨터 하드웨어와 구조폰 노이만 구조CPU와 메모리를 두고 그 사이를 *버스로 연결한 구조임.버스 : 데이터를 전달하는 통로프로그램 내장 방식을 사용함.프로그램 내장 방식폰 노이만 구조의 핵심 개념으로, 프로그램 명령어와 데이터를 메모리에 함께 저장하는 방식임.CPU(Central Processing Unit) 구성장치(1) 산술논리 연산장치 : CPU에서 실제로 데이터 연산 담당(2) 제어장치 : 모든 장치들의 동작을 지시하고 제어(3) 레지스터 : CPU내에서 계산을 위해 임시로 값을 보관하는 장치 → 변수와 같은 기능메모리 종류RAM (Random Access Memory)랜덤으로 데이터를 읽어도 데이터 저장 위치와 상관없이 읽는 속도가 같다.전력이 끊기면 데이터 휘발됨메인 메모리로 사용됨ROM (Read Only Memory)전력이 끊겨도 데이터를 보관할 수 있으나 데이터를 한번 쓰면 수정이 불가능 함.컴퓨터의 부팅과 관련된 바이오스를 저장하는데 주로 사용됨 5. 컴퓨터의 부팅과정컴퓨터의 전원을 누른 경우 ROM에 저장된 바이오스가 실행됨(1) 바이오스가 주요 하드웨어에 이상이 없는지 확인a. 이상이 있는 경우 오류음을 내며 부팅이 이루어 지지 않음b. 이상이 없는 경우 마스터 부트 레코드에 저장된 부트로더를 메모리로 가져와서 실행함(2) 부트로더 실행a. 운영체제가 여러개인 경우 실행할 운영체제 선택b. a.에서 운영체제를 선택했거나 운영체제가 하나인 경우 운영체제를 메모리로 불러옴(3) 운영체제 실행운영체제 실행 이후 실행되는 모든 응용 프로그램은 메모리에 올라와서 실행되며 운영체제가 관리함 6. 인터럽트폴링방식CPU가 입출력 관리자에게 입출력 명령을 내린 후 입출력 명령 완료 여부를 주기적으로 확인하는 방식주기적으로 CPU가 확인해줘야 하니 CPU 성능이 좋지 않음인터럽트폴링방식의 문제점 해결CPU가 입출력 관리자에게 입출력 명령을 내린 후 다른 작업을 진행한다. 입출력 관리자는 입출력이 완료되면 CPU에게 신호를 주고 CPU는 그 신호를 받아 *인터럽트 서비스 루틴(ISR)을 실행시켜 작업을 완료한다.*인터럽트 서비스 루틴(ISR) : 특정 인터럽트가 들어오면 그 인터럽트를 처리하는 함수비동기적으로 동작하기 때문에 성능에 이점이 있다.인터럽트 방식하드웨어 인터럽트 소프트웨어 인터럽트[ Section 2. 프로세스와 쓰레드 ]1. 프로그램과 프로세스프로그램(Program)이란?저장장치에 저장된 명령문의 집합체, 애플리케이션, 앱이라고도 불림.컴퓨터 관점에서 저장장치만 사용하는 수동적 존재프로세스(Process)란?저장장치에 저장된 프로그램이 메모리에 올라갔을 때 프로그램이 실행되며, 프로세스라고 불림.메모리/CPU 사용, 입/출력 작업을 진행므로 컴퓨터 관점에서 능동적인 존재프로세스의 구조1) Code 영역, 2) Data 영역, 3) Stack 영역, 4) Heap 영역 2. 멀티프로그래밍과 멀티프로세싱유니 프로그래밍(Uniprogramming)하나의 프로그램만 메모리에 적재하여 실행하는 방식한 번에 하나의 프로세스만 실행되는 가장 기본적인 운영 체제 방식멀티 프로그래밍(Multiprogramming)여러 프로그램을 메모리에 동시에 적재하여 실행하는 방식이며, 단일 CPU에서 여러 프로세스를 번갈아가며 실행한다.CPU가 한 프로세스의 작업을 처리하는 동안 다른 프로세스의 작업을 기다리는 형태로 작업을 스위칭하고, 이를 반복하여 여러 프로세스를 병렬적으로 실행하는 방식멀티 프로그래밍은 CPU의 활용도를 높이기 위해 여러 프로세스를 메모리에 적재하고, CPU가 유휴 상태에 있지 않도록 대기 상태에 있는 프로세스를 실행한다.멀티 프로세싱(Multiprocessing)멀티 프로세싱은 물리적으로 여러 개의 CPU를 사용하여 동시에 여러 프로세스를 실행하는 방식여러 개의 CPU가 병렬적으로 동작하여 프로세스를 동시에 처리할 수 있다.프로세스 간의 작업 분담: 각 CPU는 특정 프로세스를 처리하여 작업을 나누어 수행한다.프로세스 간 통신: 프로세스 간의 데이터 공유 및 통신을 통해 협력하여 작업을 수행한다.멀티 프로세싱 방식을 통해 단일 CPU 처리에 비해 더 높은 성능과 처리량을 기대할 수 있다.시분할 처리멀티프로그래밍의 한 형태로, 하나의 CPU가 여러 프로세스를 번갈아가며 실행하는 것 3. PCB (Process Control Block)PCB프로세스 생성시 운영체제는 해당 프로세스의 정보를 가지고 있는 PCB를 만들고 저장함.PCB들은 연결리스트라는 자료구조로 저장되며, 프로세스 종료시 운영체제는 연결리스트에서 해당 프로세스의 PCB를 제거함. 이때 연결리스트 구조는 유지PCB의 구조포인터, 프로세스 상태, 프로세스 ID, 프로그램 카운터, 레지스터 정보, 메모리 관련 정보, CPU 스케줄링 정보 4. 프로세스 상태프로세스는 시분할 시스템을 처리하기 위한 다섯가지 상태를 가지고 있다.1) 생성 (New)PCB를 생성하고 메모리에 프로그램 적재를 요청해둔 상태2) 준비 (Ready)프로세스가 메모리에 적재되었고, CPU 할당을 기다리는 상태준비상태의 프로세스는 CPU 스케줄러에 의해 CPU가 할당된다.대부분의 프로세스는 준비상태이다.3) 실행 (Running)준비상태의 프로세스가 CPU스케줄러에 의해 CPU를 할당받아 실행되는 상태실행상태에 있는 프로세스의 수는 CPU의 개수만큼이다. (CPU가 1개이면 실행상태의 프로세스는 최대 1개)CPU스케줄러는 부여된 시간을 초과하면 할당된 CPU를 강제로 빼앗고 프로세스는 준비상태로 되돌아간다.4) 대기 (Waiting)입출력 작업에서 입출력이 완료될 때 까지 기다리는 상태프로세스 실행상태에서 입출력 작업이 필요한 경우 프로세스를 대기상태로 전환하고 다른 프로세스에게 CPU를 할당한다. 이후 입출력 작업이 완료되면 대기상태인 프로세스에게 CPU 할당 기회를 준다.5) 완료 (Terminated)프로세스가 종료된 상태프로세스가 사용했던 데이터를 메모리에서 제거하고 생성된 PCB도 제거한다. 5. 컨텍스트 스위칭컨텍스트 스위칭 (Context Switching)프로세스 실행 중에 다른 프로세스를 실행하기 위해 실행중인 프로세스의 상태를 저장하고 새 프로세스의 상태로 전환하는 작업컨텍스트 스위칭 과정에서 PCB에 각 프로세스의 상태가 기록되며, CPU는 해당 정보로 다시 설정됨컨텍스트 스위칭 발생 이유CPU 점유시간 초과시I/O 요청이 있는 경우다른종류의 인터럽트 발생시 6. 프로세스 생성과 종료프로세스 생성 과정.exe 파일 실행시운영체제가 코드영역과 데이터 영역을 메모리에 로드 + 빈 스택과 빈 힙을 만들어 공간 확보프로세스 관리를 위한 PCB를 만들어서 값을 초기화 해준다. 1 ~ 3의 과정은 운영체제가 부팅되고 0번 프로세스 생성시 최초 1번 실행된다.이후 생성되는 프로세스는 0번 프로세스를 복사하여 사용한다. → 새로 생성하는것보다 복사가 빠름fork() 함수 사용하여 프로세스를 복사하고 exce() 함수를 실행하여 복사한 부모 프로세스의 코드 영역과 데이터 영역을 자식 프로세스가 원하는 값으로 덮어씀프로세스 종료자식 프로세스는 exit() 함수를 사용하여 부모 프로세스에게 정상 종료를 알림부모 프로세스는 자식 프로세스의 Exit Status를 읽고 자식 프로세스를 정리한다. (Exit Status=0인 경우 정상종료)좀비 프로세스자식 프로세스 보다 부모 프로세스가 먼저 종료되거나 자식 프로세스가 비정상적으로 종료되어 메모리에 계속 살아있는 상태컴퓨터를 재부팅하면 메모리가 초기화 되어 좀비 프로세스가 사라짐 7. 쓰레드 (Thread)프로세스의 문제점운영체제는 프로세스 단위로 작업을 처리하며, 각 프로세스는 독립됩 메모리 공간(코드, 데이터, 힙, 스택)을 사용한다.하지만 여러 프로세스가 실행될수록 다음과 같은 단점들이 발생한다.컨텍스트 스위칭 오버헤드 : 프로세스 간 전환 시 많은 시간이 소요메모리 공간 분리 : 프로세스 간 메모리를 공유하지 않기 때문에, 데이터를 주고받으려면 복잡한 통신 방식(IPC, Inter-Process Communication)필요, 통신의 비용이 상대적으로 많이 들며 성능 저하 발생.자원의 비효율적 사용 : 동일한 프로그램을 여러 프로세스로 실행 시, 각 프로세스가 중복된 자원을 사용하여 메모리 낭비발생.쓰레드 (Thread)프로세스의 단점을 보완하기 위해 등장하나의 프로세스 내에서 실행되는 단위이며, 1개 이상의 쓰레드가 존재할 수 있음메모리 공유쓰레드는 코드, 데이터, 힙 영역을 공유하며, 스택은 각 쓰레드마다 별도로 가진다.작업 효율프로세스 단위가 아닌 쓰레드 단위로 작업이 이루어지며, 컨텍스트 스위칭 비용이 줄어들고, 쓰레드 간 통신이 빠르고 간단하다.관리 구조쓰레드마다 ID가 부여되고, 쓰레드를 관리하기 위한 TCB(Thread Control Block)가 존재한다.프로세스와 쓰레드의 장단점쓰레드는 효율적인 자원 사용과 빠른 통신을 가능하게 하지만, 안정성 면에서는 프로세스 방식이 더 유리하다.안정성프로세스는 서로 독립적, 하나의 프로세스에 문제가 생겨도 다른 프로세스에는 영향을 주지 않음쓰레드는 하나의 프로세스 내에서 동작, 프로세스에 문제가 생기면 모든 쓰레드에 영향을 미침.성능프로세스는 메모리를 독립적으로 사용, IPC 통신으로 인해 오버헤드가 크고 속도가 느림.쓰레드는 메모리를 공유하고, 스택을 제외한 자원을 함께 사용하므로 오버헤드가 작고 빠름. 그러나 공유된 자원에서 경쟁 상태나 충돌 문제가 발생할 수 있음.[ Section 3. CPU스케줄링 ]1. CPU 스케줄링 개요CPU 스케줄링운영체제가 모든 프로세스에게 CPU를 할당/해제 하는 것CPU Burst 와 I/O BurstCPU Burst (연산)컴퓨터가 연산하는 시간I/O Burst (입출력 작업)컴퓨터가 입출력을 기다리거나 처리하는 시간 2. 다중큐프로세스 상태에서 준비(Ready)상태와 대기(Waiting)상태의 프로세스는 큐(Queue)라는 자료구조로 관리된다.큐(Queue) 자료구조선입선출(FIFO) 방식으로 작동하며, 작업이 들어온 순서대로 처리되는 자료구조먼저 들어온 작업이 먼저 처리되고 나중에 들어온 작업은 나중에 처리됨 3. 스케줄링 목표1) 리소스 사용률2) 오버헤드 최소화3) 공평성4) 처리량5) 대기시간6) 응답시간 4. FIFO (First In First Out) 알고리즘FIFO (First In First Out)먼저 들어온 작업이 먼저 처리됨.CPU 스케줄링의 입장에서 스케줄링 큐에 들어온 순서대로 CPU를 할당받아 처리하는 방식임.FIFO 알고리즘의 단점먼저 들어온 프로세스가 끝나야만 다음 프로세스가 실행될 수 있다.실행시간이 짧고 늦게 도착한 프로세스가 실행시간이 길고 빨리 도착한 프로세스의 작업을 기다려야 한다.I/O 작업이 있는 경우 I/O 작업이 끝날때 까지 CPU 가 쉬게 되므로 CPU 사용률이 떨어짐.평균 대기 시간프로세스 여러개가 실행될 때, 이 프로세스들 모두가 실행되기까지 대기시간의 평균을 말함.스케줄링의 성능은 평균 대기 시간으로 평가함FIFO 알고리즘은 프로세스의 Burst Time에 따라 성능의 차이가 심하게 나기 때문에 현대 운영체제에서 잘 쓰이지 않고 일괄처리 시스템에 쓰임.
알고리즘 · 자료구조
・
인프런워밍업클럽
・
운영체제
・
CS