🎉진짜 깜짝할인! 모든 강의 30%🎉

상반기 안녕! 하반기엔 더 힘내시라고
모든 강의 30% 깜짝 할인 중! (~7/1)

블로그

재영

[인프런 워밍업 클럽 3기] CS - 3주차 미션 (운영체제)

메모리의 종류는 어떤것들이 있나요? 각 메모리의 특징도 함께 적어주세요.레지스터가장 빠른 기억장소로 CPU 내에 존재컴퓨터의 전원이 꺼지면 데이터가 사리지므로, 휘발성 메모리에 해당메인메모리 RAM레지스터에 비하면 한참 느린 메모리휘발성 메모리실제 운영체제와 다른 프로세스들이 올라가는 공간하드디스크나 SSD 보다 속도는 빠르지만 가격이 비쌈데이터를 저장하기 보다는 실행 중인 프로그램만 올림캐시메인메모리에 있는 값을 레지스터로 옮기려면 시간이 한참 걸림이때, 미리 가져와서 저장하는 공간이 필요한데 캐시가 이에 해당휘발성 메모리성능의 이유로 여러개를 둠 (L1, L2, … )보조저장장치 (HDD, SSD 등)비휘발성 메모리사무용 프로그램이나 게임, 작업한 파일을 저장하는 공간가격이 메인 메모리에 비하면 매우 저렴함 사용자 프로세스가 메모리의 운영체제 영역에 침범하지 못하도록 만든 레지스터는 어떤 레지스터일까요?경계 레지스터하드웨어적으로 운영체제 공간과 사용자 공간을 나누는 레지스터에 해당CPU 내에 존재하며, 메모리 관리자가 사용자 프로세스가 경계 레지스터의 값을 벗어났는지 검사하고, 만약 벗어났다면 그 프로세스를 종료시킴 메모리 할당 방식에서 가변 분할 방식과 고정 분할 방식의 장단점은 뭔가요?가변 분할 방식 - 세그멘테이션장점 : 메모리를 가변적으로 분할할 수 있고, 코드영역, 데이터 영역, 스택 영역, 힙 영역을 모듈로 처리할 수 있기 때문에 공유와 각 영역에 대한 메모리 접근보호가 편리단점 : 외부 단편화가 발생 외부 단편화?프로세스들이 메모리에 적재되고 제거될 때 할당되지 않고 작은 조각들로 메모리가 나뉘어져 있는 상태 외부 단편화 해결책메모리의 내용을 한쪽으로 밀어서 큰 공간을 만드는 방법 : 밀집→ 시간 낭비가 심함요구되는 메모리 크기보다 더 크게 할당→ 이때, 할당 했지만 안쓰는 공간을 내부 단편이라고 함 고정 분할 방식 - 페이징장점 : 모든 페이지의 크기가 동일해서 세그멘테이션과 다르게 크기를 표현하는 Bound Address가 필요하지 않으며, 이러한 특징떄문에 외부 단편화가 발생하지 않음. 메모리를 효율적으로 관리할 수 있음.단점 : 하지만, 정해진 크기의 페이지보다 프로세스의 정보가 작으면 공간이 낭비, 이를 내부 단편화라고 부름.세그멘테이션과 비교하면 많은 공간을 낭비하는 것은 아니므로 심각하게 생각하지 않음.페이지로 나누기 때문에 논리적인 영역을 나눌 수 없음. 그래서 특정 영역에 대해서 공유하거나 권한을 부여하는 것이 어려움.  CPU 사용률을 올리기 위해 멀티프로그래밍을 올렸지만 스왑이 더 많이 이루어져 CPU 사용률이 0%에 가까워 지는 것을 뭐라고 할까요?스레싱 Thrashing스레싱의 원인OS는 CPU의 이용률이 낮아지면 다중 프로그래밍 정도를 높임페이지 부재가 많아지고 이로 인한 페이지 교체가 과도하게 발생하여 시스템 성능이 저하 → 스레싱근본적인 원인은 물리 메모리의 크기가 작은것→ 하드웨어적으로 해결하려면 메모리의 크기를 늘리면 됨  HDD나 SSD는 컴퓨터를 실행시키는데 꼭 필요한 걸까요? 이유를 함께 적어주세요.운영체제는 파일을 관리하기 위해 파일 관리자를 두고 파일 테이블을 이용해 파일을 관리한다.이때, 파일을 저장 하기 위한 저장장치(HDD, SSD)는 반드시 필요   파일을 삭제해도 포렌식으로 파일을 복구할 수 있는 이유가 무엇일까요?디스크에 파일을 저장할 때마다 빈 공간을 찾으려 모든 공간을 뒤지는 방식은 비효율적이므로, 파일 시스템은 효율적인 관리를 위해 빈 공간을 모아둔 free block list 를 가지고 있다.만약 파일을 삭제한다면 파일 시스템은 파일의 모든 정보를 지우는 것이 아니라 파일 테이블의 헤더를 삭제하고 사용했던 블록을 free block list 에 추가하는 방식으로 진행된다.이렇게 처리하면 사용자는 파일이 삭제된 것처럼 느껴지는데, 사용했던 블록의 데이터는 그대로 남아있기 때문에포렌식으로 데이터를 복구할 수 있음

인프런워밍업클럽3기CS3주차미션운영체제

히히

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

[인프런 워밍업 클럽 3기 - CS 전공지식 스터디]의 3주차 미션 내용을 작성한 글입니다.운영체제Q1. 메모리의 종류는 어떤것들이 있나요? 각 메모리의 특징도 함께 적어주세요.A1.- 레지스터(Register) - CPU 내부에 있는 매우 작은 용량의 초고속 메모리 - 명령어 수행에 직접적으로 사용되며, 접근 속도가 가장 빠름- 캐시(Cache) - CPU와 메인 메모리(RAM) 사이에 위치하는 고속 메모리 - 접근 속도는 레지스터보다는 느리지만, 메인 메모리보다 훨씬 빠름- 주기억장치(Main Memory, RAM) - 프로그램이 실행되는 동안 데이터를 저장하는 휘발성 메모리 - 전원이 꺼지면 데이터가 사라짐- 보조기억장치(Secondary Storage, HDD/SSD 등) - 데이터를 영구적으로 저장하는 장치 - RAM보다 훨씬 큰 용량과 비교적 저렴한 가격을 가짐 Q2. 사용자 프로세스가 메모리의 운영체제 영역에 침범하지 못하도록 만든 레지스터는 어떤 레지스터일까요?A2. 경계 레지스터, 접근 주소가 올바른 범위 내인지 확인해 불법 접근을 차단한다. Q3. 메모리 할당 방식에서 가변 분할 방식과 고정 분할 방식의 장단점은 뭔가요?A3.- 고정 분할 방식 - 구현이 단순하고 관리가 쉬움 - 메모리를 효율적으로 사용하기 어렵다.- 가변 분할 방식(Variable Partitioning) - 필요한 만큼 동적으로 메모리를 할당 - 압축 등의 추가 작업이 필요할 수 있음  Q4. CPU 사용률을 올리기 위해 멀티프로그래밍을 올렸지만 스왑이 더 많이 이루어져 CPU 사용률이 0%에 가까워 지는 것을 뭐라고 할까요?A4.스래싱(Thrashing), 너무 많은 프로세스를 동시에 메모리에 두려다가, 실제로는 페이지 부재가 연속으로 발생하고 디스크 스왑 작업만 과도하게 일어나 CPU가 작업을 거의 못 하게 된다. Q5. HDD나 SSD는 컴퓨터를 실행시키는데 꼭 필요한 걸까요? 이유를 함께 적어주세요.A5.- HDD나 SSD와 같은 보조기억장치가 있어야 운영체제를 설치하고 부팅할 수 있다.- 하지만 외부 저장장치 없이도 OS를 구동할 수 있습니다.- 즉, 일반적 PC에서 표준 운영체제를 쓰기 위해서는 HDD/SSD 가 거의 필수적이나, 특수 환경이나 임시 부팅을 통해서면 꼭 필요지는 않다. Q6. 파일을 삭제해도 포렌식으로 파일을 복구할 수 있는 이유가 무엇일까요?A6.- 운영체제의 파일 시스템은 파일을 삭제할 때 실제 데이터 영역을 즉시 ‘0’으로 지우기보다, 파일에 대한 메타데이터를 지우거나 갱신하는 방식으로 처리하는 경우가 많습니다. - 실제 데이터 블록 자체는 덮어쓰기가 일어나지 않는 한 그대로 남아있기 때문에, 이를 전문적인 포렌식 기법을 통해 스캔하면 파일이 부분적 또는 완전히 복구될 수 있다.자료구조와 알고리즘 Q1. 지금까지 배운 5개의 정렬 알고리즘의 장단점과 시간 복잡도를 적어주세요.A1.- 버블정렬: 구현이 간단하지만 비효율적, O(n²)- 선택정렬: 메모리 쓰기가 상대적으로 적음, 수행 시간이 오래 걸림, O(n²)- 삽입정렬: 정렬되어 있거나, 데이터 개수가 적을 때 빠름, 역순으로 정렬된 경우 비효율적, O(n²)- 병합정렬: 최악의 경우에도 O(n log n)으로 동작, 추가적인 메모리 공간이 필요, O(n log n)- 퀵정렬: 평균적으로 매우 빠름, 평균적으로 O(n log n), 최악의 경우는 O(n²) Q2. 메모리가 부족한 시스템에서 어떤 문제를 해결하는데 재귀로 쉽게 구현이 가능할 것 같습니다.여러분이라면 메모이제이션과 타뷸레이션 중 어떤 걸 이용하실 건가요? 이유를 함께 적어주세요.A2.메모리가 부족한 시스템이라면, 재귀 호출 스택을 많이 쓰는 메모이제이션보다는 반복문 기반의 타뷸레이션 방식을 이용할 것이다.- 타뷸레이션 방식을 이용하면 스택 오버플로를 방지하고, 함수 호출 오버헤드를 줄일 수 있다. 

인프런워밍업클럽인프런워밍업클럽3기CS

재영

[인프런 워밍업 클럽 3기] CS - 3주차 미션 (자료구조와 알고리즘)

지금까지 배운 5개의 정렬 알고리즘의 장단점과 시간 복잡도를 적어주세요.버블 정렬시간 복잡도 : $O(n^2)$장점 : 이해와 구현이 간단.단점 : 성능이 좋지 않음. 선택 정렬시간 복잡도 : $O(n^2)$장점 : 이해와 구현이 간단.단점 : 성능이 좋지 않음. 삽입 정렬시간 복잡도 : $O(n^2)$장점 : 이해와 구현이 간단.단점 : 성능이 좋지 않음. 병합 정렬시간 복잡도 : $O(nlogn)$장점 : 위 알고리즘들 보다 성능이 좋다.단점 : 재귀적인 기법으로 이해하기가 어렵고, 구현도 어려움 퀵 정렬시간 복잡도평균 : $\Theta(nlogn)$최악 : $O(n^2)$대부분의 경우 피벗을 중간값으로 설정하므로 배열을 매번 반으로 가를 수 있으므로 평균적인 성능을 가진다고 봄장점 : 병합 정렬보다 더 적은 비교와 더 적은 메모리 공간을 차지하므로, 병합 정렬보다 더 좋은 알고리즘으로 평가됨단점 : 재귀적인 기법으로 이해하기가 어렵고, 구현도 어려움 메모리가 부족한 시스템에서 어떤 문제를 해결하는데 재귀로 쉽게 구현이 가능할 것 같습니다. 여러분이라면 메모이제이션과 타뷸레이션 중 어떤 걸 이용하실 건가요? 이유를 함께 적어주세요. 타뷸레이션을 선택. 메모이제이션은 재귀를 이용해 문제를 하향식으로 해결하며 복잡한 문제를 쉽게 해결할 수 있음.메모이제이션은 계산 결과를 저장하는 방식으로 단점을 해결하는데, 이때 메모리를 이용해 성능을 향상시킴그러므로, 메모리가 부족한 시스템에서는 메모이제이션을 사용하는것은 오버플로우가 발생할 수 있을것으로 예상됨. 즉, 상향식 접근인 타뷸레이션을 선택하여 메모리를 절약하고, 속도도 빠르게 해결하는 것이 좋아보임.

인프런워밍업클럽3기CS3주차미션자료구조와알고리즘

재영

[인프런 워밍업 클럽 3기] CS - 2주차 미션 (운영체제)

FIFO 스케줄링의 장단점이 뭔가요?장점 : 단순하고 직관적임단점 : 한 프로세스가 완전히 끝나야 다음 프로세스가 시작되기 때문에 실행시간이 짧고 늦게 도착한 프로세스가 실행시간이 길고 빨리 도착한 프로세스의 작업을 기다려야 한다는 것또한, IO 작업이 있다고 한다면 CPU는 IO 작업이 끝날 때까지 쉬고있기 때문에 CPU 사용률이 떨어짐  SJF를 사용하기 여러운 이유가 뭔가요?SJF은 Shortest Job First의 약어로 버스트 타임이 짧은 프로세스를 먼저 실행하는 것사용이 어려운 이유는 다음과 같음어떤 프로세스가 얼마나 실행될지 예측하기 힘듬프로세스의 종료 시간은 예측하기가 거의 불가능버스트 타임이 긴 프로세스는 아주 오랫동안 실행되지 않을 수 있음버스트 타임이 짧은 프로세스가 중간에 계속 들어오면 버스트 타임이 긴 프로세스는 앞의 모든 프로세스가 종료될 때까지 기다려야함 RR 스케줄링에서 타임 슬라이스가 아주 작으면 어떤 문제가 발생할까요?문맥 교환 Context Switch 이 자주 발생하여 타임 슬라이스에서 실행되는 프로세스의 처리량보다 문맥 교환을 처리하는 양이 훨씬 커지게됨 운영체제가 MLFQ에서 CPU Bound Process와 I/O Bound Process를 어떻게 구분할까요?CPU를 사용하는 프로세스가 실행하다가, 스스로 CPU를 반납하면 CPU 사용이 적은것이니 I/O Bound Process 일 가능성이 높다 생각하고 I/O Bound Process 로 판단CPU를 사용하는 프로세스가 타임 슬라이스 크기를 오버해서 CPU 스캐줄러에 의해 강제로 CPU를 뺏기는 상황이면 CPU Bound Process 일 확률이 높다 생각하고 CPU Bound Process로 판단 공유자원이란무엇인가요?프로세스 간 통신을 할 때 공동으로 이용하는 변수나 파일 들을 공유자원이라고 함 교착상태에 빠질 수 있는 조건은 어떤 것들을 충족해야할까요?상호 배제비선점점유와 대기원형 대기

인프런워밍업클럽3기CS2주차미션운영체제

히히

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

[인프런 워밍업 클럽 3기 - CS 전공지식 스터디]의 2주차 미션 내용을 작성한 글입니다. 운영체제Q1. FIFO 스케줄링의 장단점이 뭔가요?A1. 장점: 구현이 매우 쉽고 단순하다.단점: 평균 대기 시간이 길어질 수 있다. Q2. SJF를 사용하기 여러운 이유가 뭔가요?A2.CPU 실행 시간을 미리 알기 어렵다. 가장 짧은 작업부터 처리하면 효율적이지만만, 실제 OS가 각 프로세스의 CPU 사용 시간을 정확히 알 수 없다. Q3. RR 스케줄링에서 타임 슬라이스가 아주 작으면 어떤 문제가 발생할까요?A3.아주 작은 타임 슬라이스로 인해, 프로세스가 실행되다가 Context Switching이 발생한다. 효율이 떨어지고 시스템 성능이 저하될 수 있다. Q4. 운영체제가 MLFQ에서 CPU Bound Process와 I/O Bound Process를 어떻게 구분할까요?A4.MLFQ에서는 타임 슬라이스 전부 소진하면 더 낮은 우선순위 큐로 내려간다.I/O Bound 프로세스는 CPU를 짧게 쓰고 자주 I/O를 수행하기 때문에, 상대적으로 높은 우선순위를 부여받고, CPU Bound 프로세스는 계속 CPU를 사용하려 하기 때문에, 낮은 우선순위로 내려간다. Q5. 공유자원이란무엇인가요?A5.여러 프로세스가 동시에 사용하거나, 사용하고 싶어 하는 자원 Q6. 교착상태에 빠질 수 있는 조건은 어떤 것들을 충족해야할까요?A6. 상호 배제, 점유 대기, 비선점, 환형 대기 자료구조와 알고리즘Q1. 재귀함수에서 기저조건을 만들지 않거나 잘못 설정했을 때 어떤 문제가 발생할 수 있나요?A1.무한 재귀가 일어나고, 결국 스택 오버플로가 발생하여 프로그램이 중단될 수 있다. Q2. 0부터 입력 n까지 홀수의 합을 더하는 재귀 함수를 만들어보세요.A2.function sumOdd(n){ if (n < 1) { return 0; } if (n % 2 !== 0) { return n + sumOdd(n - 1); } else { return sumOdd(n - 1); }} console.log(sumOdd(10)) // 25 Q3. 다음 코드는 매개변수로 주어진 파일 경로(.는 현재 디렉토리)에 있는 하위 모든 파일과 디렉토리를 출력하는 코드입니다.다음 코드를 재귀 함수를 이용하는 코드로 변경해보세요.const fs = require("fs"); // 파일을 이용하는 모듈 const path = require("path"); // 폴더와 파일의 경로를 지정해주는 모듈 function traverseDirectory1(directory){ const stack = [directory]; // 순회해야 할 디렉토리를 저장할 스택 while (stack.length > 0) { // 스택이 빌 때까지 반복 const currentDir = stack.pop(); // 현재 디렉토리 const files = fs.readdirSync(currentDir); // 인자로 주어진 경로의 디렉토리에 있는 파일or디렉토리들 for (const file of files) { // 현재 디렉토리의 모든 파일or디렉토리 순회 const filePath = path.join(currentDir, file); //directory와 file을 하나의 경로로 합쳐줌 const fileStatus= fs.statSync(filePath); // 파일정보 얻기 if (fileStatus.isDirectory()) { // 해당 파일이 디렉토리라면 console.log('디렉토리:', filePath); stack.push(filePath); } else { // 해당 파일이 파일이라면 console.log('파일:', filePath); } } } } traverseDirectory1("."); // 현재 경로의 모든 하위 경로의 파일, 디렉토리 출력A4.function traverseDirectoryRecursive(directory) { const files = fs.readdirSync(directory); for (const file of files) { const filePath = path.join(directory, file); const fileStatus = fs.statSync(filePath); if (fileStatus.isDirectory()) { console.log("디렉토리:", filePath); traverseDirectoryRecursive(filePath); } else { console.log("파일:", filePath); } } }  

웹 개발인프런워밍업클럽인프런워밍업클럽3기CS

재영

[인프런 워밍업 클럽 3기] CS - 1주차 미션 (자료구조와 알고리즘)

여러분은 교실의 학생 정보를 저장하고 열람할 수 있는 관리 프로그램을 개발하려고 합니다.이 때 여러분이라면 학생의 정보를 저장하기 위한 자료구조를 어떤 걸 선택하실 건가요? 이유를 함께 적어주세요.해시테이블을 사용해시 테이블은 Key Value로 구성되며, Key 값을 고유해야함교실의 학생들을 구별할 수 있는 고유한 정보가 존재하기 때문에, (예를 들면 학번)Key를 학번으로 하며, 학생 정보를 Value에 저장하면 됨이렇게 되면 고유한 값을 통해서 학생 정보를 쉽게 찾을 수 있을 것  여러분은 고객의 주문을 받는 프로그램을 개발하려고 합니다. 주문은 들어온 순서대로 처리됩니다. 이 때 여러분이라면 어떤 자료구조를 선택하실 건가요? 이유를 함께 적어주세요.큐 Queue 를 사용고객이 주문한 순서대로 처리되어야 하므로, FIFO를 만족하는 자료구조인 큐를 사용  우리가 구현한 스택은 0번 인덱스, 즉 입구쪽으로 데이터가 삽입되고 나오는 구조입니다. 반대로 마지막 인덱스, 즉 출구쪽으로 데이터가 삽입되고 나오는 구조로 코드를 변경해주세요.import 한 LinkedList 의 프로퍼티에는 원소의 개수를 나타내는 count가 있다고 가정import { LinkedList } from "./linked.list.ts"; class Stack { list; constructor () { this.list = new LinkedList(); } push (data) { this.list.insertAt(this.list.count, data); } pop () { try { return this.list.deleteAt(this.list.count - 1); } catch (e) { return null; } } peek () { return this.list.getNodeAt(this.list.count - 1); } isEmpty () { return (this.list.count == 0); } } export { Stack };   해시테이블의 성능은 해시 함수에 따라 달라집니다. 수업 시간에 등번호를 이용해 간단한 해시 함수를 만들어봤습니다. 이번엔 등번호가 아닌 이름을 이용해 데이터를 골고루 분산시키는 코드로 수정해주세요. ( 힌트: charCodeAt() 함수를 이용 예시: name1 = "이운재"; name1.charCodeAt(0); // 51060 이운재의 0번 인덱스 ‘이’의 유니코드 출력)hashFunction(str) { let hash = 0; for (let i = 0; i < str.length; i++) { hash += str.charCodeAt(i); } return hash % 10; } 각 문자의 Unicode 값 더한 뒤, 테이블 크기로 나눈 나머지를 사용할 수 있음.하지만, 이름이 같거나, 구성이 같은 경우(이운재, 이재운)에는 충돌이 발생할 수 있으므로 추가적인 처리가 필요해보임

인프런워밍업클럽3기CS1주차미션자료구조와알고리즘

재영

[인프런 워밍업 클럽 3기] CS - 1주차 미션 (운영체제)

while(true) { wait(1); // 1초 멈춤 bool isActivated = checkSkillActivated(); // 체크 } 위 코드는 1초 마다 플레이어가 스킬을 사용했는지 체크하는 코드입니다. 이 방식은 폴링방식입니다.1초마다 체크하기 때문에 성능에 좋지 않습니다. 이를 해결하기 위한 방식으로 어떤 걸 이용해야 할까요?스킬을 언제 사용했는지 알 수 없기 때문에 주기적으로 계속 체크하는 폴링 상황은 성능에 좋지 않음이때, 인터럽트 방식을 사용할 수 있음수업에서 예시로 설명되었던 입출력 관리자의 예시를 생각해보면, CPU는 입출력 관리자에게 명령을 내리고 CPU는 다른 일을 진행입출력 관리자는 입출력이 완료되었을 때 CPU에게 신호를 줌CPU는 그 신호를 받아 인터럽트 서비스 루틴을 실행시켜 작업을 완료하는 형식으로 처리문제와 결합하여 생각해보면, 인터럽트 신호를 플레이어가 스킬을 사용한 경우라고 볼고, 플레이어가 스킬을 사용하면 (인터럽트) 알리도록 설정하면됨  프로그램과 프로세스가 어떻게 다른가요?프로그램 : 하드디스크와 같은 저장장치에 저장된 명령문의 집합체.애플리케이션이나, 앱이라고 불리며 Windows 운영체제에서는 .exe 모양을 하고 있음컴퓨터 관점에서 하드디스크만 사용하는 수동적인 존재프로세스 : 실행중인 프로그램하드디스크에 저장된 프로그램이 메모리에 올라갔을 때 실행중인 프로그램을 프로세스라 함프로세스는 메모리도 사용하고, 운영체제의 CPU 알고리즘 스케줄 알고리즘에 따라서 CPU도 사용,필요에 따라 입력, 출력을 하기 때문에 능동적인 존재프로세스는 코드, 데이터 힙, 스택 영역으로 구성Code 영역은 자신을 실행하는 코드가 저장되어 있음Data 영역은 전역 변수와 정적 변수가 저장되어 있음Stack 영역에는 지역변수와 함수 호출을 했을 때 필요한 정보들이 저장됨Heap 영역은 프로그래머가 동적으로 메모리를 할당하는데 쓰임C언어를 예로 들면, malloc(), free() 함수를 호출하면 Heap 영역에 자원을 할당 / 해제할 수 있음  멀티프로그래밍과 멀티프로세싱이 어떻게 다른가요?멀티프로그래밍은 메모리에 여러 프로세스를 올려서 처리하는 방식CPU는 프로세스를 실행하다가 I/O 작업을 만나면 해당 프로세스에서 발생한 I/O 작업은 기다리면서 다른 프로세스를 실행 → CPU가 쉬는 시간이 줄어들며, 효율성이 올라감여기서 프로세스가 IO 작업이 있을 때만 다른 프로세스를 실행하는 것이 아닌,모든 프로세스를 짧게 실행하며 모든 프로세스를 동시에 실행시키는 것 처럼 느끼게 하는 기술을 멀티 태스킹이라고함이때, CPU가 하나가 아닌 여러 개를 사용하는 상황을 멀티프로세서라 부르며, 멀티프로세서로 작업을 처리하는 것을 멀티프로세싱이라고 함정리하면,멀티프로그래밍은 단일 CPU 관점에서 메모리에 여러 프로세스를 올려서 처리하는 방식이고,멀티프로세싱은 다중 CPU 관점에서 여러 프로세스가 짧게 실행되며 프로세스를 동시에 시키는 것처럼 느끼게 하는 상황  운영체제는 프로세스를 관리하기 위해서 어떤 것을 사용하나요?PCB Process Controll Block운영체제는 여러개의 프로세스를 전부 다 관리하고 공평하게 실행시켜야함운영체제는 프로세스가 만들어지면 해당 프로세스의 정보를 가지고 있는 PCB를 만들고 저장PCB는 연결리스트 자료구조 형태로 저장되며, PCB의 구조는 다음과 같음  컨텍스트 스위칭이란 뭔가요?컨텍스트 스위칭 Context Switching 우리말로는 문맥 교환이라고함프로세스를 실행하는 중에 다른 프로세스를 실행하기 위해 실행중인 프로세스의 상태를 저장하고 다른 프로세스의 상태값으로 교체하는 작업을 말함.컨텍스트 스위칭이 일어날 때 PCB의 내용이 변경되며, 실행중인 프로세스의 작업 내용을 PCB에 저장하고 실행 될 기존 프로세스의 PCB의 내용대로 CPU가 다시 세팅됨

인프런워밍업클럽3기CS1주차미션운영체제

워밍업 클럽 3기_PM/PO_1주차 발자국

강의 정보강의명: 시작하는 PM/PO들에게 알려주고 싶은, 프로덕트의 모든 것강사명: 김민우링크: https://inf.run/gQh4a강의 내용PM은 고객과 비즈니스의 가치, 성과를 만들어내는 직무이다. 제품의 성과 전반을 책임진다.PM의 전문성은 사용자, 비즈니스, 산업에 대한 지식에서 나온다.PM의 업무는 프로덕트, 제품의 성장 주기에 따라 달라진다. PMF 이후에는 기능 확장, 성장 등의 업무를 수행한다.문제를 정의하기 위해서는 문제의 맥락과 중요도를 검토할 수 있는 마음의 여유와 비판적인 시각이 필요하다.문제 해결을 위해서는 팀원들과 문제 상황을 논의하는 협력적인 자세가 필요하며, 검증의 과정을 반복해야 한다.사람들이 적극적으로 해결책을 찾기 위해 시간과 돈을 쓰는 문제가 해결할 가치가 있는 문제이다.후기여태껏 PM은 고객의 요구사항을 반영한 서비스를 기획하고, 팀원들과 정해진 일정 내에 프로젝트를 완수하도록 관리하는 직무라고 생각해왔다. 그래서 '리더'보다는 '가이드'와 '서포트'가 어울리는 직무라고 단정 지었다. 하지만 이번 강의를 들으면서 PM 직무를 다른 시선에서 바라볼 수 있었고, 나는 아직도 배울 게 많은 주니어라는 사실을 다시금 자각하게 되었다.현재 업무 환경에서 당장 강의 내용을 실천하기는 어렵겠지만, PM으로서 마음가짐을 새로 다져보았다. 앞으로는 고객과 비즈니스의 가치를 만들어내는 주도적인 위치에서 프로젝트에 임할 것이다. 또한, 주도적으로 문제 정의를 진행하기 위해서 다양한 서비스의 사례를 공부해야겠다.새벽마다 강의 듣고 출근하는 루틴이 버겁긴 하지만, 하나씩 알아가고 곱씹어 보는 재미가 있다. 한 달 동안 성실하게 걸어가면 그 끝에 뭐가 있을지 기대가 되는 1주차 강의였다.미션PM 직무의 현직자들은 어떻게 업을 정의 내릴지 궁금하여 브런치 글을 참고했다.강의 중에 여러 IT업계에서 요구하는 PM의 역량이 그려진 표를 보았는데, 한국 IT 기업에서 요구하는 역량과는 차이가 있는 것 같다는 생각이 들었다. 외국과 한국의 PM 직무 정의를 비교하는 아티클을 읽어보았다.미션을 하면서 사회에서 규정하는 업의 정의도 중요하지만, 나는 어떤 방향으로 가고 싶은가를 고민하게 되었다. 

기획 · PM· PO인프런워밍업클럽3기PM/PO

김보민

[인프런 워밍업 클럽 3기 - 백엔드 프로젝트] 1주차 발자국

인프런 워밍업 클럽이 시작되었다..!평소 코틀린 + 스프링에 관심이 있었는데 좋은 기회로 참여할 수 있어서 너무 좋다.🤗또 평소 nestjs만 사용했어서 스프링은 처음이라 기대가 되었다. ✅ 강의1주차 강의는 이론 위주였다.강의에서 같이 만들 프로젝트를 미리 살펴보았다.웹과 데이터베이스 개발 기본 개념에대해서 다루었다.프로젝트 초기 세팅과 엔티티 뼈대를 만들었다.코틀린 문법, 나아가 자바 문법도 안쓴지 오래되어서 따라가기 벅차지 않을까 걱정했는데 강의에서 간단한 문법만 사용하고, 잘 설명해주셔서 문제없었다. 또 진행하면서 스프링의 동작에 대해서도 알아갈 수 있어서 참 좋았다. 스프링이 처음이어서 강사님이 설명해주시는 내용애 대해 강의 자료에도 있지만, 그보다 더 자세하게 나만의 강의 노트에 정리했다.강의 진도에 밀리지 않고 미리 듣고 과제를 할 때 생각하는 시간을 더 갖자는게 목표였는데, 첫주차 강의는 진도보다 미리 다 들어서 목표 달성에 성공했다. 하지만 이 2주차에도 이어가려면 지금 발자국을 작성하는 이 시간에도 진도가 나가있어야하는데 많이 나가진 못해서 아쉽다. 이 발자국을 다 작성하고 나서 더 공부할 것이다.ㅎㅎ ✅ 미션1주차 미션은 두가지 였다.[미션1] 깃허브 리포지토리에 프로젝트 올리기[미션2] 테이블 설계하기 [미션1]은 강의에서 코틀린 프로젝트를 만들어본 것과 똑같이 프로젝트를 생성하고 올리기만하면 되어서 간단했다. 그보다 어떤 프로젝트를 할 지 고민이 많았는데, 평소 음악을 좋아해서 플레이리스트 공유 서비스 프로젝트로 선택했다. 비슷한 프로젝트를 프론트로서 참여한 적이 있는데 백엔드 입장에서 설계해보면 또 다른 느낌일 것 같다는 이유도 있다. [미션2]는 테이블 설계였다. 먼저 사용자는 여러개의 플레이리스트를 만들 수 있다는 1대다 관계에서 시작했다.그런데 음악 데이터는 어떻게할지 고민이되었다. 일단 사용자와 플레이리스트 관계에 집중하고 음악 데이터는 초기 DB에 gpt 등을 이용해 데이터를 추출해 가지고 있기로 결정했다. 그렇게 member(사용자), Track(음원), Playlist(플레이리스트)의 새 개의 테이블을 먼저 설계했다. 하지만 설계하다보니 고민거리가 있었다.member -> playlist (1:N)사용자(member) 와 플레이리스트(playlist) 간의 관계를 설계할 때, 처음에는 member 테이블에도 playlist의 FK를 두는 것을 고려했었다. 하지만 이럴 경우 member가 여러 플레이리스트를 가질 때마다 동일 사용자의 정보가 중복되어 여러 행이 생성된다. 그래서 member가 아닌 playlist 테이블 쪽에만 member의 FK를 두는 형태로 수정했다.  playlist <-> track (N:M)  playlist에 여러 track_id가 여러개 물릴 수 있으니 해당 테이블에 같은 id로 여러 행이 반복되었다. 따라서 playlist_id와 track_id를 FK로 가지는 중간 테이블 Track_Playlist를 만들게되었다. 중간 테이블이 생기니 playlist와 track 테이블에 중복되는 데이터가 사라졌다.🍀 마무리인프런 워밍업 클럽 1주차가 마무리되었다. 2주차 부터는 강의도 과제도 본격적으로 개발에 들어가게된다. 더 열심히 참여할 수 있도록 해야겠다! 화이팅!

백엔드인프런워밍업클럽3기

히히

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

[인프런 워밍업 클럽 3기 - CS 전공지식 스터디]의 1주차 미션 내용을 작성한 글입니다. 운영체제Q1.while(true){ wait(1); // 1초 멈춤 bool isActivated = checkSkillActivated(); // 체크 }위 코드는 1초 마다 플레이어가 스킬을 사용했는지 체크하는 코드입니다.이 방식은 폴링방식입니다. 1초마다 체크하기 때문에 성능에 좋지 않습니다.이를 해결하기 위한 방식으로 어떤 걸 이용해야 할까요?A1. 인터럽트 방식을 이용한다. 스킬 사용을 완료하면 인터럽트 신호를 보내고, 이를 감지해 체크할 수 있다. 이 방식을 이용하면 주기적으로 확인할 필요가 없으므로, 성능 개선이 가능하다. Q2. 프로그램과 프로세스가 어떻게 다른가요?A2.프로그램은 실행 가능한 코드 명령어나 데이터 등이 보조기억장치에 저장된 정적인 상태이다.프로세스는 메모리에 적재되어 실행되는 동적인 상태이다. Q3. 멀티프로그래밍과 멀티프로세싱이 어떻게 다른가요?A3.멀티 프로그래밍은 하나의 CPU에서 여러 프로그램이 동시에 메모리에 올라가 있다.멀티 프로세싱은 여러 개의 CPU가 존재한 환경에서 프로세스가 동시에 병렬으로 실행할 수 있다. Q4. 운영체제는 프로세스를 관리하기 위해서 어떤 것을 사용하나요?A4. 프로세스 관리를 위해 PCB를 이용한다. Q5. 컨텍스트 스위칭이란 뭔가요?A5.CPU가 현재 실행중인 프로세스의 상태를 저장하고 새로운 프로세스의 상태를 로드하여 실행을 넘기는 과정이다.자료구조와 알고리즘Q1. 여러분은 교실의 학생 정보를 저장하고 열람할 수 있는 관리 프로그램을 개발하려고 합니다.이 때 여러분이라면 학생의 정보를 저장하기 위한 자료구조를 어떤 걸 선택하실 건가요?이유를 함께 적어주세요.A1.학생 번호와 이름을 사용해 해시 테이블을 사용한다.해시테이블은 삽입과 검색 속도가 빠르기 때문에 관리 프로그램에 적합하다고 생각한다.  Q2. 여러분은 고객의 주문을 받는 프로그램을 개발하려고 합니다.주문은 들어온 순서대로 처리됩니다. 이 때 여러분이라면 어떤 자료구조를 선택하실 건가요?이유를 함께 적어주세요.A2.큐 자료구조를 선택할 것이다.주문을 들어온 순서대로 차례로 처리하기 때문에, 선입선출(FIFO) 방식의 큐 자료구조를 선택했다. Q3.우리가 구현한 스택은 0번 인덱스, 즉 입구쪽으로 데이터가 삽입되고 나오는 구조입니다.반대로 마지막 인덱스, 즉 출구쪽으로 데이터가 삽입되고 나오는 구조로 코드를 변경해주세요.A3.import { LinkedList } from './LinkedList.mjs'; class Stack{ constructor(){ this.list = new LinkedList(); } push(data){ // 마지막 인덱스에 삽입 (this.list.count는 리스트의 현재 길이) this.list.insertAt(this.list.count, data); } pop(){ try{ // 마지막 인덱스에서 제거 return this.list.deleteAt(this.list.count - 1); } catch(e){ return null; } } peek(){ // 마지막 인덱스(= top 위치)의 노드 반환 return this.list.getNodeAt(this.list.count - 1); } isEmpty(){ return (this.list.count == 0); } } export { Stack }; Q4.해시테이블의 성능은 해시 함수에 따라 달라집니다. 수업 시간에 등번호를 이용해 간단한 해시 함수를 만들어봤습니다. 이번엔 등번호가 아닌 이름을 이용해 데이터를 골고루 분산시키는 코드로 수정해주세요.힌트: charCodeAt() 함수를 이용예시: name1 = "이운재"; name1.charCodeAt(0); // 51060 이운재의 0번 인덱스 ‘이’의 유니코드 출력A4.이름의 0번 인덱스인 성은 해시충돌이 발생할 가능성이 높기 때문에, 이름에 포함된 문자들의 값을 모두 더한 후 해시 테이블의 크기인 10으로 나눈 나머지를 인덱스로 사용함. hashFunction(name) { let sum = 0; for (let i = 0; i < name.length; i++) { sum += name.charCodeAt(i); } // 해시 테이블의 크기가 10이므로 % 10 return sum % 10; } 

웹 개발인프런워밍업클럽인프런워밍업클럽3기CS감자

채널톡 아이콘