블로그

윤승현

[인프런 워밍업 클럽 CS 2기] - CS 3주차 미션

[운영체제] 메모리의 종류는 어떤 것들이 있나요? 각 메모리의 특징도 함께 적어주세요.레지스터 : 가장 빠른 기억장소로 CPU내에 존재하고 있다. 컴퓨터의 전원이 꺼지면 데이터가 사라지기 때문에 휘발성 메모리라고 부른다.캐시 : 레시스터는 CPU가 사용하는 메모리로 굉장히 빠르다. 그에 비해 메인 메모리는 너무 느리다. 메인 메모리에 있는 값을 레지스터로 옮기려면 한참 걸리기 때문에 필요할 것 같은 데이터를 미리 가져오기로 한다. 미리 가져온 데이터를 저장하는 곳이 바로 캐시이다.메인 메모리(RAM) : 메인 메모리는 실제 운영체제와 다른 프로세스들이 올라가는 공간이다. 그리고 전원이 공급되지 않으면 데이터가 지워지기 때문에 휘발성 메모리이다.보조 저장 장치(HDD, SSD) : 가격이 저렴하고 전원이 공급되지 않아도 데이터가 지워지지 않는 비휘발성 메모리이다. 사용자 프로세스가 메모리의 운영체제 영역에 침범하지 못하도록 만든 레지스터는 어떤 레지스터일까요?경계 레지스터 : CPU내에 존재하는 레지스터로 메모리 관리자가 사용자 프로세스가 경계 레지스터의 값을 벗어났는지 검사하고 만약 벗어났다면 그 프로세스를 종료시킨다. 메모리 할당 방식에서 가변 분할 방식과 고정 분할 방식의 장단점은 뭔가요?가변 분할 방식장점은 메모리에 연속된 공간에 할당되기 때문에 더 크게 할당돼서 낭비되는 공간인 “내부 단편화”가 없다.단점은 “외부 단편화”가 발생한다.고정 분할 방식장점은 구현이 간단하고 오버헤드가 적다는 것이다.단점은 작은 프로세스도 큰 영역에 할당돼서 공간이 낭비되는 “내부 단편화”가 발생한다. CPU 사용률을 올리기 위해 멀티프로그래밍을 올렸지만 스왑이 더 많이 이루어져 CPU 사용률이 0%에 가까워 지는 것을 뭐라고 할까요?스레싱이라고 한다. CPU 사용률을 높이려 했지만 오히려 더 떨어지는 상황이 나오는 것이다. HDD나 SSD는 컴퓨터를 실행시키는데 꼭 필요한 걸까요? 이유를 함께 적어주세요.운영체제를 저장하고 실행하기 위해 필수적인 역할을 한다. 그리고 응용 프로그램과 사용자 데이터를 저장하는 장치이기 때문에 필요하다. 파일을 삭제해도 포렌식으로 파일을 복구할 수 있는 이유가 무엇일까요?파일 시스템에서 효율적인 관리를 위해 빈 공간을 모아둔 free block list를 가지고 있다. 만약 특정 파일을 삭제한다면 파일 시스템은 파일의 모든 정보를 지우는 것이 아니라 파일 테이블의 헤더를 삭제하고 free block list에 추가한다. 만약 어떤 파일을 지운다고 가정하면 파일 테이블에서 해당 파일의 헤더를 지워주고 사용했던 블록을 free block list에 넣어준다. 이렇게 처리하면 사용자는 파일이 삭제된 것처럼 느껴지지만 사용했던 블록의 데이터는 그대로 남아있기 때문에 범죄를 저질러서 증거를 인멸하더라도 포렌식을 통해 데이터를 복구할 수 있다.  [자료구조와 알고리즘] 지금까지 배운 5개의 정렬 알고리즘의 장단점과 시간 복잡도를 적어주세요. 버블 정렬장점 : 이해와 구현이 간단하다.단점 : 성능이 O(n²)으로 성능이 좋지 않다.시간 복잡도 : O(n²) 선택 정렬장점 : 이해와 구현이 간단하다.단점 : 성능이 O(n²)으로 성능이 좋지 않다.시간 복잡도 : O(n²) 삽입 정렬장점 : 이해와 구현이 간단하다.단점 : 성능이 O(n²)으로 성능이 좋지 않다.시간 복잡도 : O(n²) 병합 정렬장점 : 성능이 좋다.단점 : 재귀적인 기법으로 이해하기가 조금 어렵다. 그리고 이해와 구현이 어렵다.시간 복잡도 : O(nlogn) 퀵 정렬장점 : 평균적으로 빠른 속도를 내서 성능이 좋다.단점 : 안정적인 정렬을 보장하지 않는다.시간 복잡도 : 평균 시간 복잡도는 O(nlogn), 최악의 경우 시간 복잡도는 O(n²) 메모리가 부족한 시스템에서 어떤 문제를 해결하는데 재귀로 쉽게 구현이 가능할 것 같습니다. 여러분이라면 메모이제이션과 타뷸레이션 중 어떤 걸 이용하실 건가요? 이유를 함께 적어주세요.메모리가 부족한 시스템에서는 타뷸레이션이 더 적합하다고 생각합니다.그 이유는 재귀 호출로 인한 스택 오버플로우 위험도 없고 메모리도 절약하고 속도도 빠르게 해결할 수 있기 때문입니다.  

인프런워밍업클럽CS미션

윤승현

[인프런 워밍업 클럽 CS 2기] - CS 2주차 미션

[운영체제] 1. FIFO 스케줄링의 장단점이 뭔가요?장점은 단순하고 직관적이다.단점은 한 프로세스가 완전히 끝나야 다음 프로세스가 시작되기 때문에 실행 시간이 짧고 늦게 도착한 프로세스가 실행 시간이 길고 빨리 도착한 프로세스의 작업을 기다려야 한다는 것이다. 2. SJF를 사용하기 어러운 이유가 뭔가요?어떤 프로세스가 얼마나 실행될 지 예측하기가 힘들고 Burst Time이 긴 프로세스는 아주 오랫동안 실행되지 않을 수도 있기 때문에 SJF를 사용하기가 어렵다. 3. RR 스케줄링에서 타임 슬라이스가 아주 작으면 어떤 문제가 발생할까요?타임 슬라이스가 아주 작으면 컨텍스트 스위칭이 너무 자주 일어나게 되고, 타임 슬라이스에서 실행되는 프로세스의 처리량보다 컨텍스트 스위칭을 처리하는 양이 훨씬 커져서 오버헤드가 커지는 상황이 발생한다. 4. 운영체제가 MLFQ에서 CPU Bound Process와 I/O Bound Process를 어떻게 구분할까요?CPU를 사용하는 프로세스가 실행하다가 스스로 CPU를 반납하면 CPU 사용이 적은거니 I/O Bound Process일 확률이 높고 반대로 CPU를 사용하는 프로세스가 타임 슬라이스 크기를 오버해서 CPU 스케줄러에 의해 강제로 CPU를 뺏기는 상황이면 CPU 사용이 많은 것이니 CPU Bound Process일 확률이 높다. 5. 공유자원이란무엇인가요?프로세스 간 통신을 할 때 공동으로 이용하는 변수나 파일들이 있는데 이런 것들을 공유 자원이라고 한다. 6. 교착상태에 빠질 수 있는 조건은 어떤 것들을 충족해야할까요?상호 배제 : 어떤 프로세스가 한 리소스를 점유했다면 그 리소스는 다른 프로세스에게 공유가 되면 안된다.비선점 : 어떤 프로세스가 리소스를 점유하고 있는데 다른 프로세스가 그 리소스를 빼앗을 수 없어야 한다.점유와 대기 : 어떤 프로세스가 한 리소스를 가지고 있는 상태에서 다른 리소스를 원하는 상태여야 한다.원형 대기 : 점유와 대기를 하는 프로세스들의 관계가 원형을 이루고 있는 것 이다.  [자료구조와 알고리즘] 1. 재귀함수에서 기저조건을 만들지 않거나 잘못 설정했을 때 어떤 문제가 발생할 수 있나요?무한 재귀 호출 : 기저 조건이 없거나 잘못 설정되어 재귀 호출이 끝나지 않고 계속 반복될 수 있다. 이 경우 함수는 끝없이 자기 자신을 호출하며, 결국 무한 루프에 빠지게 된다.스택 오버플로우 : 재귀 호출이 계속되면 함수 호출에 필요한 메모리가 쌓이게 되는데, 대부분의 시스템에서 사용할 수 있는 스택 메모리에는 한계가 있기 때문에 프로그램이 비정상적으로 종료된다. 2. 0부터 입력 n까지 홀수의 합을 더하는 재귀 함수를 만들어보세요.function sumOdd(n){ // 재귀 로직 } console.log(sumOdd(10)) // 25 public class Main { public static void main(String[] args) { int n = 10; System.out.println(sumOdd(n)); // 25 출력 } // 재귀 함수 public static int sumOdd(int n) { // n이 0보다 작으면 더하지 않음 if (n <= 0) { return 0; } // n이 홀수인 경우 더하기 if (n % 2 != 0) { return n + sumOdd(n - 1); } else { // n이 짝수인 경우 다음 홀수로 넘어가기 return sumOdd(n - 1); } } }   

인프런워밍업클럽CS미션

윤승현

[인프런 워밍업 클럽 CS 2기] - CS 1주차 미션

운영체제 1.while(true){ wait(1); // 1초 멈춤 bool isActivated = checkSkillActivated(); // 체크 }위 코드는 1초 마다 플레이어가 스킬을 사용했는지 체크하는 코드입니다.이 방식은 폴링방식입니다.1초마다 체크하기 때문에 성능에 좋지 않습니다.이를 해결하기 위한 방식으로 어떤 걸 이용해야 할까요? 인터럽트 방식을 사용한다. 인터럽트는 폴링 방식의 단점을 해결한 방식인데 CPU가 입출력 관리자에게 입출력 명령을 내리고 자기는 다른 작업을 계속하는 방식이다. 프로그램과 프로세스가 어떻게 다른가요?  프로그램은 컴퓨터 관점에서 하드 디스크. 즉, 저장 장치(HDD, SDD)만 사용하는 수동적인 존재이다.반면 프로세스는 메모리도 사용하고 운영체제의 CPU 스케줄링 알고리즘에 따라서 CPU도 사용하고 필요에 따라 입력과 출력을 하기 때문에 능동적인 존재이다. 멀티프로그래밍과 멀티프로세싱이 어떻게 다른가요?멀티 프로그래밍은 메모리에 여러 개의 프로세스가 올라온 것이다.멀티 프로세싱은 CPU가 여러 개의 프로세스를 처리하는 것이다. 운영체제는 프로세스를 관리하기 위해서 어떤 것을 사용하나요?PCB(Process Control Block)를 사용한다.포인터, 프로세스 상태, 프로세스 ID, 프로그램 카운터, 레지스터 정보, 메모리 관련 정보, CPU 스케줄링 정보 등 여러 정보가 있다. 컨텍스트 스위칭이란 뭔가요?컨텍스트 스위칭은 프로세스를 실행하는 중에 다른 프로세스를 실행하기 위해 실행 중인 프로세스의 상태를 저장하고 다른 프로세스의 상태 값으로 교체하는 작업이다.  자료구조와 알고리즘 여러분은 교실의 학생 정보를 저장하고 열람할 수 있는 관리 프로그램을 개발하려고 합니다.이 때 여러분이라면 학생의 정보를 저장하기 위한 자료구조를 어떤 걸 선택하실 건가요?이유를 함께 적어주세요. 해시 테이블을 사용할 것 같다.해시 테이블은 평균적으로 O(1) 시간 복잡도를 가지기 때문에 학생의 ID나 이름과 같은 고유한 값을 해시 키로 사용하면 학생 정보를 빠르게 검색할 수 있기 때문이다.해시 테이블은 평균적으로 데이터의 삽입과 삭제도 매우 빠르게 처리된다. 새로운 학생을 추가하거나 어떤 학생을 제거할 때도 효율적이라고 생각한다. 여러분은 고객의 주문을 받는 프로그램을 개발하려고 합니다.주문은 들어온 순서대로 처리됩니다.이 때 여러분이라면 어떤 자료구조를 선택하실 건가요?이유를 함께 적어주세요. 주문이 들어온 순서대로 처리된다는 점을 고려할 때 "큐(Queue)" 자료구조를 선택할 것 같다.큐는 FIFO 방식으로 작동하는 자료구조다. 그래서 먼저 들어온 주문이 먼저 처리되기 때문에 주문 처리 시스템에 적합한 구조라고 생각한다.  

CS미션

채널톡 아이콘