블로그
전체 62024. 10. 19.
1
인프런 워밍업 클럽 스터디 2기 - CS 3주차 발자국
강의 수강운영체제일주일 간의 학습했던 내용메모리의 종류레지스터, 캐시, 메인메모리, HDD/SSD속도 : 레지스터 메모리의 주소메모리를 컴퓨터에 연결하면 0부터 시작하는 주소공간이 있다. -> 물리주소공간 이와 다르게 사용자 관점에서 바라보는 주소 공간 -> 논리 주소 공간메모리에 운영체제를 위한 공간이 따로 존재한다. -> 사용자 프로세스가 운영체제를 침범하지 못하도록 경계 레지스터를 만듬경계 레지스터 : 메모리 관리자가 사용자 프로세스가 경계 레지스터의 값을 벗어났는지 검사하고 만약 벗어났다면 그 프로세스를 종료시킨다. 메모리 할당 방식가변 분할 방식 (세그멘테이션)프로세스가 크면 메모리도 크게 할당한 프로세스가 메모리에 연속된 공간에 할당되기 뗴문에 연속 메모리 할당이라고 함장점 : 내부 단편화가 없음 단점 : 외부 단편화 발생고정 분할 방식 (페이징)프로세스 크기와 상관없이 메모리를 할당비연속 메모리 할당.장점 : 구현이 간단하고 오버헤드가 적다.단점 : 내부 단편화 발생버디 시스템2의 승수로 메모리를 분할해 메모리를 할당하는 방식2의 승수로 동일하게 메모리를 분할해서, 반대로 조립만 하면 큰 공간이 만들어지기 때문에 조각모음보다 간단하다.외부 단편화를 방지하기 위해 메모리 공간을 확보하는 것이 간단하다. 내부 단편화가 발생하긴 하지만, 많은 공간의 낭비가 발생하지는 않는다. 가상메모리최대 메모리 크기가 4GB일 때, 운영체제를 포함해서 많은 프로세스는 어떻게 실행할까? 가상메모리 시스템은 물리메모리 내용의 일부를 하드디스크에 있는 스왑영역으로 옮기고 처리가 필요할 때 물리 메모리로 가져와 실행시키기 때문에, 모두 실행 가능논리주소에서 물리주소로 변환할 때 사용하는 기법세그멘테이션페이징페이지드 세그멘테이션페이징 교체 정책FIFO앞으로 가장 오랫동안 쓰이지 않을 페이지 선택 (Optimum) -> 구현 불가능, 성능 비교용도로 쓰임LRU -> Optimum과 비슷한 성능스레싱과 워킹셋스레싱 : CPU 사용률을 높이기 위해 멀티 프로그래밍 정도를 올렸지만 스왑작업의 시간 등으로 오히려 사용률이 더 떨어지는 현상워킹셋 : 현재 메모리의 올라온 페이지는 다시 사용할 확률이 높기 때문 하나의 세트로 묶어서 메모리에 올림 입출력장치 캐릭터 디바이스데이터 전송단위 : 글자마우스, 키보드, 사운드카드블록 디바이스데이터 전송단위 : 블록하드디스크, SSD, 그래픽카드메인보드에 있는 버스로 연결됨 -> 하나의 버스는 Address 버스, Data 버스, Control 버스로 이루어져 있음 파일시스템순차 파일 구조파일의 내용이 연속적으로 이어진 형태 장점 : 공간의 낭비가 없고 구조가 단순 단점 : 데이터를 삽입/삭제할 때 시간이 많이 걸림직접 파일 구조해시함수를 통해 저장위치를 결정하는 파일구조 데이터 접근 굉장히 빠름 해시함수에 따라 저장공간 낭비 될 수 있음인덱스 파일 구조인덱스 테이블을 통해 블록 번호를 알아낸 후순차 데이터의 블록 번호로 접근해서 파일에 접근하는 방 자료구조와 알고리즘일주일 간의 학습했던 내용성능이 좋지 않지만, 구현이 단순한 정렬버블정렬선택정렬삽입정렬구현이 복잡하지만, 성능이 빠른 정렬 -> 분할정복 기법 사용병합정렬퀵정렬메모이제이션 계산 결과를 저장해서 여러 번 계산하지 않도록 하는 기법재귀를 통한 하향식 계산 방식에 적합함속도가 빨라지지만, 메모리를 더 사용하게 된다.타뷸레이션상향식 계산 방식으로 계산에 필요한 모든 값을 테이블에 저장하는 방식메모리를 더 사용하긴 하지만, 재귀를 통한 방식이 아니기 떄문에 메모이제이션보다는 덜 사용한다. 미션 미션을 해결한 과정미션을 해결하면서 고민을 했던 2문제가 있습니다.HDD나 SSD는 필수?처음에는 당연히 필수라고 생각했습니다. 부트로더가 저장되어 있는 메모리가 무조건 있어야 컴퓨터가 실행될 수 있다고 생각했기 때문입니다.그런데 부트로더를 담을 수 있는 USB 같은 저장장치가 있다면 실행이 가능하다고 생각이 들어서 수정했습니다.메모이제이션 or 타뷸레이션?처음에 '메모리가 부족한 시스템' 이라는 문구를 못 보고 메모이제이션을 사용해야 한다고 생각했는데뒤늦게 확인하고.. 다시 답변을 작성했습니다.메모리가 부족하다면 시스템이 비정상 종료될 수 있는 심각한 오류를 발생시킬 수 있고, 이게 현실에서 일어난다면 회사가 난리가 날 것 같다는 생각을 했습니다..그런데 개발 서버에서 충분한 부하를 주면서 성능 테스트를 해보고, 메모리에 이상 없다는 결과가 나온다면 메모이제이션도 사용해볼만 하다는 생각도 했습니다.회고우선 알고리즘, 운영체제 강의를 완강하게 돼서 기쁩니다! 만약 혼자 강의를 수강했다면, 3주 기간 안에 완강은 못 했을 것 같습니다.제가 워밍업 클럽에 참여하게 된 계기는 부족한 CS 지식을 채우기 위해서도 있었지만, 여러 개발자들로부터 동기부여를 받고 싶어서 지원했었습니다.그런 저에게 이번 워밍업 클럽이 어땠냐고 묻는다면.. 저는 200% 만족합니다.최근 들어서 정말 저의 나태함을 느끼고 있었는데 러너분들이 올려주시는 미션과 발자국, 그리고 디스코드에서 남겨주시는 질문들이 저를 계속 책상에 앉게 만들어줬던 것 같습니다.그리고 강의가 너무 재밌었습니다. 학부생 때 들었던 CS 강의보다 3배는 더 재밌었던 것 같아요.워밍업 클럽이 끝나도 항상 조금씩이라도 공부하는 습관을 유지하려고 합니다. 더 이상 나태함에 빠지고 싶지 않아요 😢저에게 동기부여해주신 러너분들, 그리고 좋은 강의 제작해주신 감자님 모두 감사드립니다.
2024. 10. 19.
1
인프런 워밍업 클럽 스터디 2기 - CS 미션 3
운영체제1. 메모리의 종류는 어떤것들이 있나요? 각 메모리의 특징도 함께 적어주세요.레지스터가장 빠른 기억장소이며, CPU 내에 존재합니다.휘발성 메모리입니다. -> 컴퓨터 전원이 꺼지면 데이터가 사라집니다.CPU가 계산할 때 메인메모리에 있는 값을 레지스터로 가져와 계산을 합니다. 캐시레지스터보다 느리고, 메인메모리보다 빠릅니다.메인메모리에 있는 값을 레지스터로 가져오면 느리기 때문에, 필요할 것 같은 데이터를 미리 저장하는 곳입니다.캐시는 여러 개로 나누어지고, L1 캐시에 데이터가 없다면 L2 캐시를 확인합니다.메인메모리실제 운영체제와 다른 프로세스들이 올라가는 공간입니다.휘발성 메모리입니다.가격이 비싸기 문에 데이터를 저장하기보다는 실행중인 프로그램만 올라갑니다. HDD, SDD비휘발성 메모리입니다. -> 파일을 저장하기 적합합니다.가장 느린 메모리입니다.가격이 저렴합니다. 2. 사용자 프로세스가 메모리의 운영체제 영역에 침범하지 못하도록 만든 레지스터는 어떤 레지스터일까요?경계 레지스터입니다.메모리 관리자는 사용자 프로세스가 경계 레지스터의 값을 벗어났는지 검사하고 만약 벗어났다면 그 프로세스를 종료시킵니다.3. 메모리 할당 방식에서 가변 분할 방식과 고정 분할 방식의 장단점은 뭔가요?가변 분할 방식장점 : 메모리가 프로세스의 크기에 딱 맞게 할당되기 때문에, 프로세스 크기보다 더 크게 할당돼서 낭비되는 공간인 내부 단편화가 없습니다.단점 : 새로운 프로세스에게 비연속된 공간의 메모리를 할당할 수 없는 외부 단편화가 발생합니다.고정 분할 방식장점 : 메모리를 같은 크기로 나누기 때문에 구현이 간단하고 오버헤드가 적습니다.단점 : 내부 단편화가 발생합니다.4. CPU 사용률을 올리기 위해 멀티프로그래밍을 올렸지만 스왑이 더 많이 이루어져 CPU 사용률이 0%에 가까워 지는 것을 뭐라고 할까요?스레싱입니다.5. HDD나 SSD는 컴퓨터를 실행시키는데 꼭 필요한 걸까요?이유를 함께 적어주세요.USB 같은 보조기억장치가 있다면 꼭 필요하지는 않을 것 같습니다.컴퓨터가 부팅이 될 때 바이오스가 실행된 후 부트로더를 메모리로 가져와서 실행합니다. 부트로더가 없으면 컴퓨터를 실행시킬 수 없습니다.결국 부트로더가 저장될 수 있는 저장매체가 필요합니다. 6. 파일을 삭제해도 포렌식으로 파일을 복구할 수 있는 이유가 무엇일까요?파일이 삭제될 때 파일시스템은 파일의 모든 정보를 지우는 것이 아니라 파일 테이블의 헤더를 삭제합니다.그리고 사용했던 파일 테이블의 블록을 free block list에 추가합니다.사용했던 블록의 데이터는 그대로 남아있기 때문에 복구가 가능합니다. 자료구조와 알고리즘1. 지금까지 배운 5개의 정렬 알고리즘의 장단점과 시간 복잡도를 적어주세요.버블정렬장점 : 이해와 구현이 간단합니다.단점 : 성능이 좋지 않습니다.시간복잡도 : O(n^2) 선택정렬장점 : 이해와 구현이 간단합니다. 단점 : 성능이 좋지 않습니다.시간복잡도 : O(n^2)삽입정렬장점 : 이해와 구현이 간단합니다.단점 : 성능이 좋지 않습니다.시간복잡도 : O(n^2) 병합정렬장점 : 성능이 좋습니다. 단점 : 이해와 구현이 어렵습니다.시간복잡도 : O(nlogn)퀵정렬장점 : 성능이 좋습니다. 단점 : 이해와 구현이 어렵습니다.시간복잡도 : 피벗이 한쪽에 쏠리는 경우 O(n^2), 피벗이 배열의 반을 가르는 경우 Ө(nlogn)=> 피벗이 계속해서 한쪽에 쏠리는 경우가 드물기 때문에, 보통 Ө(nlogn) 의 시간복잡도를 가집니다. 2. 메모리가 부족한 시스템에서 어떤 문제를 해결하는데 재귀로 쉽게 구현이 가능할 것 같습니다.여러분이라면 메모이제이션과 타뷸레이션 중 어떤 걸 이용하실 건가요? 이유를 함께 적어주세요.메모리가 부족한 시스템이라면 타뷸레이션을 사용할 것입니다.메모이제이션으로 재귀 문제를 해결하는 것이 더 쉽다고 해도, 더 많은 메모리를 사용함으로 인해 시스템에 메모리 관련 이슈가 생긴다면 더 심각한 문제가 발생할 수 있다고 생각합니다.타뷸레이션을 사용하는 방식이 문제 해결에는 더 어렵겠지만, 시스템에 크리티컬한 이슈를 피할 수 있다고 생각합니다.
2024. 10. 13.
1
인프런 워밍업 클럽 스터디 2기 - CS 2주차 발자국
강의 수강운영체제일주일 간의 학습했던 내용SJF (Shortest Job First)FIFO에서 Burst Time이 짧은 프로세스를 먼저 실행했을 때 평균 대기 시간이 짧아져서 고안된 알고리즘현실적 어려움 존재 : 프로세스의 작업시간 예측 어려움, Burst Time이 긴 프로세스는 오랫동안 실행되지 않을 수 있음현재 사용되지 않는다.RR (Round Robin)할당된 시간이 지나면 강제로 다른 프로세스에게 CPU를 할당, CPU를 뺏긴 프로세스는 큐의 맨 뒤로 밀려나는 방식 타임 슬라이스 : 프로세스에게 할당하는 일정 시간타임 슬라이스의 값이 매우 크다면, FIFO와 비슷해진다.타임 슬라이스의 값이 매우 작다면, 컨텍스트 스위칭 비용 > 프로세스 처리량 (오버헤드가 커진다.)MLPQ오늘날 운영체제에서 가장 일반적으로 쓰이는 CPU 스케줄링 기법기본적으로는 CPU 사용률과 I/O 사용률이 좋게 나오는 작은 크기의 타임 슬라이스를 선택CPU Bound Process에게는 타임 슬라이스를 크게 준다.우선순위 가진 큐를 여러 개 준비 후, 프로세스는 타임 슬라이스에 맞는 큐로 이동하게 됨프로세스 간 통신컴퓨터 내의 프로세스 간의 통신 : 파일, 파이프를 이용프로세스 내 쓰레드 간의 통신 : 데이터 영역의 전역변수나 힙을 이용해서 통신네트워크를 이용한 통신 : 소켓 통신, RPC 사용공유자원과 임계구역공유자원 : 프로세스 간 통신을 할 때 공동으로 이용하는 변수나 파일 -> 동기화 문제가 존재한다.임계구역 : 여러 프로세스가 동시에 사용하면 안 되는 영역임계구역 문제를 해결하기 위해서는 상호배제 매커니즘이 필요하다.임계영역엔 동시에 하나의 프로세스만 접근한다.여러 요청에도 하나의 프로세스의 접근만 허용한다.임계 구역에 들어간 프로세스는 빠르게 나와야한다.세마포어운영체제가 가지고 있는 열쇠세마포어는 실제로 여러개의 열쇠를 가질 수 있다.단점 : wait(), signal() 함수의 순서를 이상하게 호출해서 세마포어를 잘못 사용할 가능성 존재모니터세마포어의 단점을 해결한 상호배제 매커니즘운영체제가 아니라 프로그래밍 언어에서 지원한다.ex) Java에서 synchronized가 붙으면 동시에 여러 프로세스에서 실행시킬 수 없다.상호배제가 완벽하게 이루어진다. 데드락 (교착 상태) : 여러 프로세스가 서로 다른 프로세스의 작업이 끝나기를 기다리다가 아무도 작업을 진행하지 못하는 상태교착 상태의 필요조건 : 상호배제, 비선점, 점유와 대기, 원형 대기교착상태 회피프로세스에게 자원을 할당할 때 교착상태가 발생하지 않는 수준의 자원 할당을 한다.운영체제는 최대한 안정 상태를 유지하려고 자원 할당을 한다.이를 표현한 알고리즘 : 은행원 알고리즘은행원 알고리즘은 좋지만, 비용이 비싸고 비효율적 교착상태 검출 방식가벼운 교착 상태 검출프로세스가 일정한 시간동안 작업하지 않는다면 교착상태가 발생했다고 간주해결 방식 : 일정 시점마다 체크포인트를 만들어 작업을 저장하고 타임아웃으로 교착상태가 발생했다면 마지막으로 저장했던 체크포인트로 롤백무거운 교착 상태 검출현재 운영체제에서 프로세스가 어떤 자원을 사용하는지 지켜보고 교착상태가 발생했다면 해결자원 할당 그래프에서 순환구조가 생긴다면 교착상태라고 간주해결 방식 : 교착상태를 일으킨 프로세스를 강제종료 -> 다시 실행 시 체크포인트로 롤백단점 : 지속적으로 자원 할당 그래프를 유지하고 검사해야 하기 때문에 오버헤드 발생장점 : 정확함 (억울하게 종료되는 프로세스 없음)자료구조와 알고리즘일주일 간의 학습했던 내용재귀어떤 정의를 참조할 때 자기 자신을 참조하는 것계속 호출하게 되면 콜스택이라는 메모리 공간이 가득 차서 비정상으로 종료된다. -> 정상 종료를 위한 기저조건이 필요for문으로 해결 가능한 상황을 재귀함수로 해결하려고 하면 비효율적인 경우도 많다. -> 메모리 공간을 더 많이 차지하기 때문하향식 계산을 해야 성능이 Good -> 하위 문제의 결과를 기반으로 현재 문제를 계산하는 것팩토리얼, 하노이 탑버블 정렬앞에 있는 숫자와 바로 옆에 있는 숫자를 비교해서 자리를 바꾸는 방식으로 정렬하는 알고리즘장점 : 이해와 구현이 간단하다.단점 : 성능이 좋지 않다. -> O(n^2)선택 정렬배열이 정렬되지 않은 영역의 첫 번째 원소를 시작으로 마지막 원소까지 비교 후 가장 작은 값을 첫 번째 원소로 가져오는 방식장단점은 버블 정렬과 동일하다.회고칭찬하고 싶은 점 이해가 한번에 안 되는 부분은 강의를 여러 번 돌려보고 개인적으로 다른 정보도 찾아보면서 공부했습니다.개인 공부 시간을 늘렸다는 것에 칭찬하고 싶습니다.아쉬웠던 점 늦게 퇴근하는 날이 있었어서, 2~3일치 강의를 몰아서 수강했습니다 😢그래서 그런지 조금 급하게 강의를 수강한 것 같아서 아쉽습니다.보완하고 싶은 점 스케줄에 밀리지 않고 강의를 수강할 수 있도록 보완하고 싶습니다. 미션 미션을 해결한 과정재귀함수를 만드는 문제에서 두 가지 고민을 했습니다.어떻게 기저조건을 만들지 처음에는 n == 1일 때만 고려해서 기저조건을 만들었습니다.if (n == 1) { return 1; }하지만 문제에 0부터 입력 n까지 의 홀수의 합을 구하는 문제였기 때문에 0 이하의 수를 입력 받게 되는 경우도 고려해야 한다고 생각했습니다. 그래서 아래 기저 조건을 추가했습니다.if (n 어떻게 메모리 사용을 줄일지처음에는 n이 짝수일 경우에는 바로 sumOdd(n -1) 을 호출해서 홀수의 합만 구할 수 있도록 만들었습니다.function sumOdd(n) { // 기저조건 생략 if (n % 2 == 0) { return sumOdd(n - 1); } return n + sumOdd(n - 1); }하지만 n이 짝수일 경우는 계산 결과에 포함되어 있지 않기 때문에 불필요하게 콜스택 메모리를 많이 사용할 수 있다고 생각했습니다.그래서 최초 호출 시 n이 짝수로 들어왔을 때에만, sumOdd(n - 1)을 호출해서 파라미터를 홀수로 만들고그 뒤로는 sumOdd(n - 2)를 호출해서 파라미터가 홀수인 경우만 고려할 수 있도록 수정했습니다.function sumOdd(n) { // 기저조건 생략 if (n % 2 == 0) { return sumOdd(n - 1); } return n + sumOdd(n - 2); // 이 부분을 수정}그 외의 문제들은 강의 내용을 토대로 해결했습니다!회고미션 해결을 하면서 학습했던 내용을 복습하게 되는 것 같아서 좋았습니다.특히 재귀 함수를 만드는 문제는 고민할 포인트가 다양해서 재밌었습니다 😄실무에서도 코드를 작성할 때 성능을 고려해서 작성하는 습관을 들여야겠다는 생각을 하게 되었습니다.다음 미션이 기대가 되는 이번주 미션이었습니다 👍
2024. 10. 12.
1
인프런 워밍업 클럽 스터디 2기 - CS 미션 2
운영체제1. FIFO 스케줄링의 장단점이 뭔가요?장점 : 단순하고 직관적입니다.단점한 프로세스가 끝나야 다음 프로세스가 시작할 수 있기 때문에 실행시간이 짤은 프로세스가 실행시간이 긴 프로세스의 작업이 끝날 때까지 기다려야 합니다.I/O 작업이 있다면 I/O 작업이 끝날 떄까지 CPU가 쉬어야 하기 때문에 CPU 사용률이 감소합니다. 2. SJF를 사용하기 여러운 이유가 뭔가요?어떤 프로세스가 얼마나 걸릴지 예측하기 힘듭니다.Burst Time이 긴 프로세스는 오랫동안 실행되지 않을 수도 있습니다. 3. RR 스케줄링에서 타임 슬라이스가 아주 작으면 어떤 문제가 발생할까요?프로세스 처리량보다 컨텍스트 스위칭 비용이 더 커질 수 있습니다. 오버헤드가 너무 커집니다. 4. 운영체제가 MLFQ에서 CPU Bound Process와 I/O Bound Process를 어떻게 구분할까요?CPU를 사용하는 프로세스가 타임 슬라이스 크기를 초과해서 CPU 스케줄러에 의해 강제로 CPU를 뺏기는 상황이면 CPU Bound Process라고 간주합니다.CPU를 사용하는 프로세스가 실행하다가 스스로 CPU를 반납하면 CPU 사용이 적은 것 I/O Bound Process라고 간주합니다. 5. 공유자원이란 무엇인가요?프로세스 간 통신을 할 때 공동으로 이용하는 변수나 파일을 말합니다.공동으로 이용하기 때문에 연산결과 예측이 힘들어서 동기화 문제가 있을 수 있습니다. 6. 교착상태에 빠질 수 있는 조건은 어떤 것들을 충족해야 할까요?상호배제 : 어떤 프로세스가 한 리소스를 점유했다면 그 리소스는 다른 프로세스에게 공유가 되면 안 됩니다.비선점 : 프로세스 A가 리소스를 점유하고 있는데 프로세스 B가 리소스를 뺏을 수 없어야 합니다.점유와 대기 : 한 프로세스가 리소스 A를 가지고 있는 상태에서 리소스 B를 원하는 상태여야 합니다. 원형 대기 : 점유와 대기를 하는 프로세스들의 관계가 원형을 이루고 있어야 합니다. 자료구조와 알고리즘1. 재귀함수에서 기저조건을 만들지 않거나 잘못 설정했을 때 어떤 문제가 발생할 수 있나요?콜스택 메모리 공간이 가득 차서 비정상적으로 함수가 종료될 수 있습니다. 2. 0부터 입력 n까지 홀수의 합을 더하는 재귀 함수를 만들어보세요.function sumOdd(n) { if (n
2024. 10. 05.
1
인프런 워밍업 클럽 스터디 2기 - CS 1주차 발자국
강의 수강운영체제일주일 간의 학습했던 내용운영체제가 하는 일 : 프로세스 관리, 메모리 관리, 하드웨어 관리, 파일 시스템 관리운영체제의 역사1. 1950년대 에니악 : 스위치와 배선을 연결해서 프로그래밍, 입출력 중간에 계산 불가2. 1950년대 초 : 직접 회로가 만들어짐, 컴퓨터가 카드를 읽어 계산하고 라인 프린터로 출력3. 1950년대 중후반 : "싱글스트림 배치시스템"의 등장, 입출력 중에도 CPU가 계산 가능 4. 1960년도 : 시분할 시스템의 등장 5. 1970년대 이후 : 개인용 컴퓨터 사회의 등장, GUI 도입 운영체제의 등장운영체제의 구조커널 : 프로세스와 메모리, 저장장치를 관리하는 핵심적인 기능 담당-> 사용자는 운영체제의 커널에 직접 접근 불가-> 애플리케이션은 '시스템 콜'을 통해서 커널에 접근 가능-> 시스템 콜 없이 하드디스크에 접근 가능하다면, 중요 데이터를 덮어쓸 수 있다.컴퓨터 하드웨어와 구조오늘날 대부분의 컴퓨터는 프로그램 내장 방식의 폰 노이만 구조 메인보드 : 다른 하드웨어를 연결하는 장치CPU : 중앙처리 장치 메모리 컴퓨터의 부팅과정1. ROM에 저장된 바이오스 실행됨2. 바이오스는 주요 하드웨어에 이상이 없는지 확인3. 이상이 있으면 부팅 X, 이상이 없다면 부트로더를 메모리로 가져와서 실행4. 운영체제가 여러 개 설치되어 있다면, 선택 화면이 나온다.5. 운영체제를 메모리로 불러온다.6. 부팅 후부터는 운영체제가 메모리를 관리한다. 인터럽트폴링 방식을 보완한 방식CPU는 입출력 명령을 내린 후 자기는 다른 작업을 계속 함입출력 관리자는 입출력이 완료되면 CPU에게 신호를 주고, CPU는 신호를 받아서 ISR를 실행 시켜서 작업 완료한다.인터럽트는 비동기 방식이기 떄문에 성능에 이점이 있다. 프로그램과 프로세스프로그램 : 저장장치에 저장된 명령문의 집합체프로세스 : 실행중인 프로그램프로세스 영역 -> Code : 실행하는 코드-> Data : 전역변수, static 변수-> Stack : 지역변수, 매개변수-> Heap : 프로그래머가 런타임 시 할당할 수 있는 동적 메모리 공간 exe 파일을 실행하게 되면, 하드디스크의 프로그램이 메모리에 올라가게 되고 이제 프로세스로 불린다. 멀티 프로그래밍과 멀티 프로세싱멀티프로그래밍 : 메모리에 여러 개의 프로세스가 올라간 상태멀티프로세싱 : CPU가 여러 개의 프로세스를 처리하는 것오늘날 멀티프로그래밍, 멀티프로세싱 두 개가 공존한다. PCB프로세스가 만들어지면 운영체제는 해당 프로세스의 정보를 가지고 있는PCB를 만들고 저장한다.PCB의 구조 : 프로세스 상태, 프로세스 ID, 프로그램 카운터, 여러 레지스터 정보 등등 프로세스 상태 컨텍스트 스위칭프로세스를 실행하는 중에 다른 프로세스를 실행하기 위해실행중인 프로세스의 상태를 저장하고 다른 프로세스의 상태값으로 교체하는 것을 말함.컨텍스트 스위칭이 일어날 때 PCB의 내용이 변경됨-> 실행중인 프로세스의 작업내용을 PCB에 저장하고 실행될 기존 프로세스의 PCB의 내용대로 CPU가 다시 세팅 프로세스 생성과 종료프로세스 생성 과정-> 운영체제는 해당 프로그램의 코드영역과 데이터 영역을 메모리에 로드하고-> 빈 스택고 빈 힙을 만들어 공간을 확보-> 해당 프로세스를 관리하기 위한 PCB를 만들고 값을 초기화위 생성과정은 운영체제가 부팅되고 0번 프로세스를 만들 때 딱 한번만 실행됨 나머지 프로세스는 0번 프로세스를 복사해서 쓰게 된다. 복사된 프로세스는 코드와 데이터 영역을 자신이 원하는 값으로 덮어쓴다.쓰레드프로세스 내의 존재하고, 프로세스의 PCB, 코드, 데이터, 힙 영역을 공유한다.스택 영역은 공유하지 않고 쓰레드마다 하나씩 가지고 있다. 프로세스는 독립적이기 때문에 안정성이 높음, 쓰레드는 프로세스에 의존적이기 때문에 안정성이 낮음프로세스 간의 통신은 IPC를 사용해야 하기 때문에 오버헤드가 크고 속도가 느림, 쓰레드 간의 통신은 빠름CPU 스케줄링어떤 프로세스에게 CPU 사용권을 줘야 하는지CPU를 할당받은 프로세스가 얼마의 시간동안 이용해야 하는지다중 큐프로세스의 준비 상태와 대기 상태는 큐 자료구조로 관리된다.운영체제는 해당 프로세스의 우선순위를 보고 그에 맞는 "준비 큐"에 넣는다.CPU 스케줄러는 "준비상태의 다중큐"에 들어있는 프로세스들 중에 적당한 프로세스를 선택해서 실행상태로 전환시킨다큐에는 프로세스의 PCB가 들어간다.FIFO장점 : 단순하고 직관적단점 : 한 프로세스가 완전히 끝나야 다음 프로세스가 시작, CPU 사용률 감소FIFO는 프로세스 Burst 타임에 따라 성능 차이가 심하게 난다. -> 현대 운영체제에서 잘 쓰이지 않는다.자료구조와 알고리즘일주일 간의 학습했던 내용자료구조와 알고리즘이란?자료구조 : 데이터가 어떤 구조로 저장되고 어떻게 사용되는지를 나타낸다.알고리즘 : 어떤 문제를 해결하기 위한 확실한 방법알고리즘은 자료구조에 많은 영향을 받는다.시간복잡도일반적으로 알고리즘의 속도 = 성능의 척도주로 Big-O (최악의 경우 시간복잡도) 로 시간복잡도를 계산한다.Big-O 표기법 : 계산에 영향을 많이 미치는 항만 표기한다.배열장점 : 빠른 참조 성능 -> O(1)단점 : 데이터 삽입, 삭제가 비효율적이다, 메모리 낭비 발생 가능연결리스트장점 : 초기 크기를 알 필요가 없다. (메모리 낭비 가능성 감소), 삽입/삭제가 간편함단점 : 느린 참조 성능 -> O(n)스택FILO의 구조그림판의 Ctrl + Z, 괄호 형식 체크에 쓰일 수 있다.큐FIFO의 구조스택과 반대 성질을 가진 구조이다.덱데이터의 삽입과 제거를 head, tail에서 자유롭게 할 수 있다.스택과 큐의 성질을 모두 가지고 있는 구조해시 테이블해시 함수로 인덱스를 새로 만들어서 데이터를 저장하는 구조이다.장점 : 성능이 매우 빠르다. (읽기, 삽입, 수정, 삭제 : O(1))단점 : 해시함수에 따라 메모리를 많이 차지할 수도 있다.인덱스가 같으면 충돌 현상이 있을 수 있다. -> Value를 연결리스트로 구현하면 해결 가능셋데이터의 중복을 허용하지 않는 구조해시테이블의 Value는 사용하지 않고 Key만 사용해서 구현 가능 회고칭찬하고 싶은 점 강의 스케줄을 밀리지 않고 수강한 점에 대해서 칭찬하고 싶습니다. 늦게 퇴근했던 날에는 쉬고 싶기도 했는데, 다른 스터디원들이 올려주신 블로그 글이나 디스코드에서 다양한 개발 관련 이야기를 해주시는 걸 보고 동기부여를 받고 강의를 수강했습니다. 배울 점이 많은 스터디원과 함께 하는 것 같아서 좋습니다👍아쉬웠던 점 강의를 듣다 보면 생소한 키워드들이 나올 때가 있었는데, 이에 대해서 개인적으로 공부하는 시간이 부족했던 것 같습니다. 또, 잘 이해했는지 복습하는 시간이 부족했던 것 같습니다.보완하고 싶은 점 차주부터는 강의 수강뿐만 아니라, 이해가 부족한 부분을 찾아서 개인 공부하는 시간을 늘리려고 합니다. 또, 강의를 들은 다음 날에는 복습하는 시간을 가져서 효율적인 학습을 하기 위해 노력할 것입니다. 미션 미션을 해결한 과정운영체제 미션 1번 문제는 폴링 방식으로 작성된 예제 코드를 어떻게 수정해야 인터럽트 방식으로 개선이 가능한지 고민했습니다.주기적으로 확인하는 반복문을 제거하고 ISR 메서드를 만드는 방식으로 수정했습니다.자료구조와 알고리즘 1번 문제는 답이 정해져 있지 않다고 생각해서, 특정 요구사항이 있다고 가정하고 답변을 작성했습니다. (저장하는 경우가 많은지, 열람하는 경우가 많은지 등)그 외 문제는 공부한 내용을 토대로 작성했습니다! 회고미션 해결을 하면서 학습했던 내용을 복습하게 되는 것 같아서 좋았습니다.처음에는 강의를 안 보고 답변을 작성한 후에, 강의를 보고 부족한 답변을 보완하는 방식으로 문제를 해결했는데다음 미션 때는 강의를 안 보고도 부족한 답변이 없도록 노력하겠습니다!
2024. 10. 03.
1
인프런 워밍업 클럽 스터디 2기 - CS 미션 1
운영체제 while(true){ wait(1); // 1초 멈춤 bool isActivated = checkSkillActivated(); // 체크 }1. 위 코드는 1초 마다 플레이어가 스킬을 사용했는지 체크하는 코드입니다. 이 방식은 폴링방식입니다. 1초마다 체크하기 때문에 성능에 좋지 않습니다. 이를 해결하기 위한 방식으로 어떤 걸 이용해야 할까요? 인터럽트 방식을 사용해야 합니다.폴링 방식은 주기적으로 작업이 완료됐는지 확인하기 떄문에 성능이 떨어집니다.인터럽트 방식은 작업이 완료됐을 때 신호를 주고, 신호를 받은 CPU는 인터럽트 서비스 루틴을 실행시켜서 작업을 완료하는 방식입니다.인터럽트 방식은 주기적으로 작업 완료를 확인하지 않고, 비동기적으로 동작하기 때문에 폴링 방식보다 성능이 더 좋습니다.플레이어가 스킬을 사용했을 떄 실행될 함수를 만들어서 아래처럼 수정할 수 있습니다.void checkStillActivated() { Skill skill = new Skill(); // 스킬 사용 (로직 생략) actiavteSkill(skill); // ISR 실행 } // ISR interrupt activateSkill(Skill skill) { if (skill == ATTACK) { print("Use Attack Skill") } } 2. 프로그램과 프로세스가 어떻게 다른가요?프로그램은 저장장치에 저장된 명령문의 집합체입니다.프로세스는 현재 메모리에 올라가 있는 실행 중인 프로그램입니다.컴퓨터 관점에서 보면 프로그램은 저장장치만 사용하는 수동적인 존재이지만,프로세스는 메모리, CPU를 사용하고 입출력 작업도 수행하기 때문에 능동적인 존재로 볼 수 있습니다.3. 멀티프로그래밍과 멀티프로세싱이 어떻게 다른가요?멀티프로그래밍은 메모리에 여러 개의 프로세스가 올라온 상태이고,멀티프로세싱은 CPU가 여러 개의 프로세스를 처리하는 것을 말합니다.OS는 메모리에 여러 프로그램을 올려놓고, 시분할 처리로 CPU가 여러 프로그램을 교대로 실행합니다.즉, 오늘날 OS는 멀티 프로그래밍과 멀티 프로세싱이 공존합니다.4. 운영체제는 프로세스를 관리하기 위해서 어떤 것을 사용하나요?PCB를 사용합니다.프로세스가 만들어지면 운영체제는 이를 관리하기 위해 해당 프로세스의 정보를 가지고 있는 PCB를 만들고 저장합니다.PCB에는 다른 프로세스로 접근하기 위한 포인터, 프로세스 상태, 프로세스 ID, 프로그램 카운터, 레지스터 정보, 메모리 관련 정보, CPU 스케줄링 정보 등등 프로세스와 관련된 정보가 저장되어 있습니다. 5. 컨텍스트 스위칭이란 뭔가요?프로세스를 실행하는 중에 다른 프로세스를 실행하기 위해실행중인 프로세스의 상태를 저장하고 다른 프로세스의 상태값으로 교체하는 것을 말합니다.현재 실행중인 프로세스의 작업내용을 PCB에 저장하고,실행될 기존 프로세스의 PCB의 내용대로 CPU가 다시 세팅됩니다.컨텍스트 스위칭이 일어날 때 PCB의 프로세스 상태, 프로그램 카운터, 각종 레지스터 값들이 변경됩니다.자료구조와 알고리즘 1. 여러분은 교실의 학생 정보를 저장하고 열람할 수 있는 관리 프로그램을 개발하려고 합니다. 이 때 여러분이라면 학생의 정보를 저장하기 위한 자료구조를 어떤 걸 선택하실 건가요? 이유를 함께 적어주세요.요구사항에 따라 배열과 연결리스트 둘 중 하나를 선택할 것 같습니다.학생 정보가 추가/삭제되는 경우가 많다면 메모리의 크기를 미리 지정하기 어렵기 떄문에 연결리스트를 사용할 것이고,학생을 열람하는 경우가 많다면 참조 성능이 좋은 배열을 사용할 것 같습니다.연결리스트는 미리 크기를 지정하지 않아도 되고,배열은 데이터에 접근할 때 O(1)의 시간복잡도가 들기 때문입니다.2. 여러분은 고객의 주문을 받는 프로그램을 개발하려고 합니다. 주문은 들어온 순서대로 처리됩니다. 이 때 여러분이라면 어떤 자료구조를 선택하실 건가요? 이유를 함께 적어주세요.큐를 선택하겠습니다.큐는 먼저 들어온 데이터가 먼저 나가는 FIFO의 구조를 가지고 있기 때문에,먼저 들어온 주문이 먼저 처리되는 방식을 효율적으로 개발할 수 있을 것 같습니다.