블로그
전체 22024. 10. 13.
1
[CS 스터디] 2주차 발자국
강의https://www.inflearn.com/course/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EA%B8%B0%EB%B3%B8https://www.inflearn.com/course/%EB%B9%84%EC%A0%84%EA%B3%B5%EC%9E%90-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C미션운영체제FIFO 스케줄링의 장단점이 뭔가요? 장점: 단순함, 단점: burst time에 따라 성능이 좌우됨. 운빨.. SJF를 사용하기 여러운 이유가 뭔가요? 종료시간을 예측하기 힘듬. 그리고 시간이 긴애들은 계속해서 기다려야 함 RR 스케줄링에서 타임 슬라이스가 아주 작으면 어떤 문제가 발생할까요? 컨텍스트 스위칭이 자주 발생해서 오버헤드 가능성이 생김 운영체제가 MLFQ에서 CPU Bound Process와 I/O Bound Process를 어떻게 구분할까요? 우선순위 큐를 여러개 두어 구분함 공유자원이란무엇인가요? 프로세스 동기화 시 여러 프로세스가 같이 사용하는 자원 교착상태에 빠질 수 있는 조건은 어떤 것들을 충족해야할까요 상호배제 , 비선점 , 점유와 대기 , 원형 대기자료구조와 알고리즘재귀함수에서 기저조건을 만들지 않거나 잘못 설정했을 때 어떤 문제가 발생할 수 있나요? 콜스택 무한 적재.. OOM! 0부터 입력 n까지 홀수의 합을 더하는 재귀 함수를 만들어보세요.public class OddSum { public static void main(String[] args) { int n = 10; // 예시로 n을 10으로 설정 int sum = sumOddNumbers(n); } public static int sumOddNumbers(int n) { // n이 0보다 작으면 종료 if (n 자료구조재귀탈출(종료) 조건이 꼭 있어야 함콜스택? 함수가 호출되면서 올라가는 메모리 영역 (==스택)먼저 들어온 데이터가 먼저 나간다.. FILO다음 함수를 종료조건에 맞지 않으면 계속 콜스택을 쌓아감for문으로 쓸 만한걸 재귀를 쓰면 메모리 손해가 생김, 오히려 성능이 안좋을때가 많음근데 왜 쓰냐? 팩토리얼 같은 문제단순한 반복실행 (성능? 은 별로)하위문제의 결과를 기반으로 상위문제를 해결 (ex 팩토리얼)for문: 상향식재귀: 하향식하노이의 탑 : 재귀적 사고..!!버블정렬쉽지만 그닥 성능은 별로..앞과 옆 숫자를 비교해서 자리를 바꿈4, 2, 3, 12, 4, 3, 12, 3, 4, 12, 3, 1, 4 (다음은 마지막 원소 빼고, 이미 정렬되었기 때문)2, 3, 1, 42, 1, 3, 4 (3, 4 빼고)1, 2, 3, 4성능: O(n^2) 선택정렬4, 2, 1, 3 (가장 작은 값 체크하고==1 이를 1번 자리에 4와 교환)1, 2, 4, 3 (가장 작은 값 2, 이를 교환하지 않아도 됨)1, 2, 3, 4성능: O(n^2) 운영체제cpu 스케줄링 방법 이어서...SJFShortest Job First큐의 특성상 Burst time이 짧은게 먼저 실행되기 때문에 먼저 보내면 평균 대기시간이 짧아짐 -> 짧은거 먼저?!이론상 fifo보다 성능은 좋음근데 프로세스 종료 시간을 예측하기 힘듦... 또 긴 애들은 먼저 와도 계속 밀릴 것.. ㅠㅠ RRRound Robinfifo는 앞이 다 끝나야 다음게 실행 됨 -> 하나의 프로세스를 시간을 주고 그 시간동안만 실행하게 함 -> 시간이 끝나면 프로세스 안끝나도 다른 애한테 줌 -> 원래 프로세스는 큐 맨뒤로...왔다 갔다.. 라운드 로빈!!즉 타임 슬라이스근데 타임 슬라이스가 큰 경우에는 계속 끊기지 않을까? -> 아주 작게 설정하면 동시에 실행하는 것같겠지만 컨텍스트 스위칭이 너무 자주 발생함 -> 오버헤드?MLFQMulti Level Feedback Queue제일 많이 쓰임 .. RR의 상위호환프로세스마다 중요하게 생각하는 애들이 다름IO실행시 인터럽트 발생 -> 짧게 넘김 -> 다음 프로세스 ...손해보는 프로세스가 생김우선순위 큐 여러개 만들어 둠.. 우선순이 낮을 수록 타임 슬라이스 높아지게! 프로세스 동기화통신 종류파일- 파이프 : 하나의 파일쓰레드 : 한 프로세스 내에서 힙 이용네트워크: 소켓통신, RPC 등공유자원, 임계구역공유 자원 동기화 문제 발생-> 여러 프로세스가 동시에 사용하면 안되는 영역:: 임계구역상호 배제 매커니즘 필요세마포어상호 배제 매커니즘 종류 중 하나
2024. 10. 06.
1
[CS스터디] 1주차 발자국
강의https://www.inflearn.com/course/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EA%B8%B0%EB%B3%B8https://www.inflearn.com/course/%EB%B9%84%EC%A0%84%EA%B3%B5%EC%9E%90-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C자료구조와 알고리즘배열스택 (LIFO)컴퓨터 ctrl+z같이 되돌리기 작업 문법 검사 (같은 괄호 만나면 스택에서 꺼내기) Push, pop, peek, isEmpty -> 연결리스트로 구현 큐(FIFO) Head, tail 변수 두개로 양방향 조회 기능 CurrentNode 바꿔줘야 함 Enqueue, dequeue, front, isEmpty -> 이중연결리스트로 구현 운영체제구조커널 : 직접 접근 안됨인터페이스 : 커널에 접근 (gui, cli)시스템콜: 어플리케이션이 커널을 사용하기 위한 인터페이스드라이버: 하드웨어가 커널을 사용하기 위한 인터페이스 하드웨어와 구조메인보드: 하드웨어 연결, 버스가 연결해줌Cpu제어장치(Control Unit)산술논리연산장치 (ALU) : 실제로 연산하는 장치레지스터 : 연산하기 위해 잠시 저장; 변수라고 생각하면 된다 메모리 RAM : 메인 메모리, 임시, 속도 동일하게 데이터 조회ROM : 영구, 부팅 관련 데이터(바이오스) 연결단자: 스피커, 모니터, 키보드 등 인터럽트폴링 방식 : 주기적으로 cpu가 확인 -> 성능 안좋음인터럽트 방식: ISR(인터럽트 서비스 루틴) 실행, 비동기적으로 동작 -> 성능 좋음 하드웨어 방식 : 하드웨어 입출력소프트웨어 방식 : 유효하지 않은 메모리에 접근, 0으로 나누는 명령어 등 프로그램과 프로세스프로그램 : 애플리케이션, .exe프로세스: 실행중인 프로그램 하드웨어에 있는 프로그램이 RAM메모리에 올라갔을 때 실행 중인 프로그램 Code : 실행하는 코드 저장Data : 전역, static변수Heap: 지역변수, 함수호출시 필요한 정보 Stack : 사람이 동적으로 할당할 수 있는 공간 (malloc, free등) 멀티프로그래밍과 멀티 프로세싱멀티프로그래밍: 여러 개의 프로세스에 여러 개의 프로그램이 올라 온 것멀티프로세싱: CPU가 여러 개의 프로세스를 처리하는 것 (시분할) PCB (Process Control Block): 멀티 프로세싱을 위해서 OS는 해당 프로세스의 정보를 가지고 있는 것연결리스트로 저장 프로세스 종료시 PCB를 연결리스트에서 제거 포인터, 프로세스 상태, 프로세스ID, 프로그램 카운터, 레지스터 정보, 메모리 관련 정보, CPU스케줄링정보 등… 프로세스 상태시분할 -> 여러 프로세스를 돌아가며 실행, 속도가 빨라서 동시처럼 보이지만 한번에 한 프로세스밖에 실행할 수 있음생성 : PCB생성 후 메모리에 프로그램 적재 요청 준비 : CPU 사용을 기다리고 있음, CPU 스케줄러에 의해 할당됨, 대부분의 상태로 존재실행 : 준비 상태에 있는 프로세스가 CPU를 할당받아 실행되는 상태, CPU개수만큼 실행할 수 있음, 할당받은 시간이 끝나면 준비상태로 돌아감대기 : 프로세스가 입출력 요청을 하면 입출력이 완료될때까지 기다림, 대기 상태에 두고 다른 프로세스를 실행 상태가 될 수 있음 -> 입출력이 느리기 때문에 효율적 완료 : 프로세스가 종료, PCB제거 컨텍스트 스위칭A 프로세스를 실행하는 중에 다른 B 프로세스를 실행하기 위해 실행 중이였던 A 프로세스 상태를 저장하고 다른 B 프로세스의 정보를 가져오는 상황이때 PCB(상태 저장하는 곳) 내용이 변경 됨 프로세스 할당 시간 끝남운영체제는 인터럽트를 발생시킴현재 CPU의 레지스터 값을 PCB A에 저장PCB B에 있는 값으로 CPU 레지스터 세팅프로그램 카운터(PC) 정보 포함: 다음 실행할 명령어의 주소 -> 바로 B실행 가능 B의 할당 시간 끝남인터럽트 발생B의 상태를 PCB B에 저장PCB A에서 A의 상태를 가져오고 다시 A를 실행 입출력 요청, 점유시간이 끝남, 인터럽트가 있을 때 등.. 프로세스 생성과 종료.exe 실행프로그램의 code영역과 data영역을 메모리에 로드빈 스택과 빈 힙을 만듦PCB 생성 후 값 초기화 일련의 과정은 부팅되고 0번 프로세스(부모) 실행할 때 딱 한번 실행이후엔 0번 프로세스를 복사(fork)해서 사용 (자식) 복사할 때 모든 프로세스 내용(code, data, heap, stack)과 PCB내용을 전부 복사해 옴 이 후 exec함수를 실행시키면 본인이 원하는 값으로 덮어쓰게 됨 쓰레드프로세스가 많아질수록 차지하는 메모리가 많이 차지하기 때문에 필요 -> 한개의 프로세스 내에 n개의 쓰레드가 있음Code, data, heap을 공유하며, stack은 쓰레드마다 하나씩 가지고 있음 쓰레드 id와 Thread Control Block (TCB) 생김 -> 운영체제가 작업을 처리하는 단위는 프로세스가 아닌 쓰레드임 CPU 스케줄링어떤 프로세스얼마의 시간동안CPU Burst: CPU할당받아 실행I/O Burst: 입출력 작업 다중큐준비, 대기상태는 큐로 존재실행->준비: 우선순위를 보고 그에 맞는 준비 큐에 PCB를 넣음 스케줄링 목표리소스 사용률 오버헤드 최소화공평성 처리량 대기시간응답시간 스케줄링 알고리즘FIFO 스케줄링 큐에 들어온 순서대로 할당 앞선 프로세스가 완전히 끝나야만 다음 프로세스가 실행할 수 있음 평균대기시간이 순서에 따라 차이가 심하게 남 -> 성능 차이 -> 일괄처리시스템에 보통 사용 미션운영체제인터럽트 방식으로 해결2. 프로그램: .exe형식의 애플리케이션 프로세스: 실행 중인 프로그램3. 멀티프로그래밍: 여러 프로그램을 실행 멀티프로세싱: (CPU관점) cpu가 여러 프로세스를 처리4. PCB를 사용하여 멀티 프로세싱을 가능하게 관리함5. 어떤 프로세스 실행 중에 다른 프로세스를 실행하기 위해 원래 프로세스 정보를 저장해두고 다른 프로세스를 처리하는 것자료구조와 알고리즘1. 여러분은 교실의 학생 정보를 저장하고 열람할 수 있는 관리 프로그램을 개발하려고 합니다.이 때 여러분이라면 학생의 정보를 저장하기 위한 자료구조를 어떤 걸 선택하실 건가요?이유를 함께 적어주세요.프로그램의 목표: 저장 및 열람을 해야 함교실의 학생 정보: 자주 바뀌지 않음열람: 조회는 자주 함삽입 삭제는 자주 일어나지 않지만 조회는 많이 한다면 배열을 선택하는 것이 좋음 2. 여러분은 고객의 주문을 받는 프로그램을 개발하려고 합니다. 주문은 들어온 순서대로 처리됩니다. 이 때 여러분이라면 어떤 자료구조를 선택하실 건가요? 이유를 함께 적어주세요.들어온 순서대로라면 fifo 즉 큐 자료구조가 필요하다