inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

워밍업 클럽 CS 3기] 1주차 발자국

한선규
0

notion으로 정리한 내용입니다.

 

1강. 운영체제의 필요성


2강. 운영체제 발전 과정


3강. 운영체제의 구조


4강. CPU와 메모리


5강. 컴퓨터 부팅 과정

  1. 전원 ON → ROM의 BIOS 실행

  2. 주요 하드웨어 이상 검사 (POST, Power-On Self Test)

    • 이상 발견 시 부팅 중단

    • 이상 없으면 다음 단계 진행

  3. 하드디스크의 MBR(Master Boot Record)에서 부트로더 로드

  4. 운영체제 로딩 및 실행


6강. 입출력과 인터럽트

 

1강: 프로그램과 프로세스

프로세스의 구조

  1. CODE: 실행할 명령어 저장 (텍스트 영역)

  2. DATA: 전역 변수, 정적 변수 저장

  3. HEAP: 동적 할당된 메모리 공간

  4. STACK: 함수 호출 정보, 지역 변수 저장


2강: 프로그래밍과 프로세싱

1) 유니프로그래밍 vs 멀티프로그래밍 (메모리 관점)

2) 멀티프로세싱 (CPU 관점)

스와핑(Swapping)


3강: 프로세스 제어 블록(PCB)

운영체제는 프로세스가 생성될 때 해당 프로세스의 정보를 저장하는 PCB(Process Control Block) 를 생성하고 관리한다.

PCB는 연결 리스트 형태로 저장되며, 프로세스가 종료되면 운영체제는 해당 프로세스의 PCB를 연결 리스트에서 제거한다.

PCB 주요 정보:


4강: 프로세스 상태

프로세스는 실행 과정에서 여러 상태를 거치며, 운영체제는 이를 관리한다.

  1. 생성 (New)

    • PCB를 생성하고, 프로그램을 메모리에 적재하는 과정

  2. 준비 (Ready)

    • CPU를 사용하기 위해 대기 중인 상태

    • 대부분의 프로세스가 이 상태에 머무름

    • CPU 스케줄러가 준비 상태의 프로세스 중 하나를 선택하여 실행 상태로 전환

  3. 실행 (Running)

    • 실제로 CPU를 할당받아 실행되는 상태

    • 한 번에 실행되는 프로세스의 수는 CPU 개수와 동일

    • 일정 시간이 지나면 다시 준비 상태로 돌아갈 수 있음 (스케줄링 정책에 따라)

  4. 대기 (Waiting)

    • 입출력(I/O) 요청 등의 이유로 CPU가 아닌 다른 자원을 기다리는 상태

    • 요청이 완료되면 다시 준비 상태로 전환

  5. 완료 (Terminated)

    • 프로세스 실행이 종료되며, 사용했던 메모리와 PCB가 제거됨

5강: 컨텍스트 스위칭 (Context Switching)

컨텍스트 스위칭은 실행 중인 프로세스의 상태를 저장하고, 다른 프로세스의 상태를 복원하여 실행하는 과정이다. 이 과정에서 PCB(Process Control Block)의 내용이 변경된다.


컨텍스트 스위칭 과정

  1. 현재 실행 중인 프로세스의 상태 저장

    • PCB에 프로그램 카운터, 레지스터 값, 프로세스 상태 등 저장

  2. 새로운 프로세스의 PCB를 로드

    • 프로그램 카운터를 새로운 프로세스의 위치로 변경

    • 레지스터 값을 복원

  3. 새로운 프로세스 실행


컨텍스트 스위칭 발생 이유

  1. CPU 점유 시간이 종료됨 (타임 슬라이스 만료)

  2. I/O 요청 발생 (입출력이 완료될 때까지 다른 프로세스를 실행)

  3. 인터럽트 발생 (외부 장치 요청, 시스템 호출 등)

프로세스 생성과 종료

 

배열

일반적으로 배열은 운영체제에서 배열의 크기를 알려줌, 운영체제는 배열의 시작 주소만 기억

배열의 인덱스 참조는 길이에 상관없이 한 번에 가져옴 O(1) → 참조에 좋은 성능

BUT 배열의 데이터 삽입, 삭제 성능은 좋지 않음 (배열의 크기가 정적이기 때문)(JS는 크기를 정해두지 않음)

배열의 장점 배열의 단점 참조 O(1) 크기 예측이 힘듦, 메모리낭비 데이터 삽입 삭제 비효율적

배열의 단점 해결하고 싶음 → 저장하려는 데이터들을 메모리 공간에 분산해 할당 and 서로 연결

연결 리스트

연결 리스트는 노드를 가짐, 노드는 데이터, 포인터를 가지고 있음

연결 리스트는 첫 노드의 주소만 알면 다른 노드들에 접근할 수 있음

연결 리스트 장점 연결 리스트 장점 데이터 삽입, 삭제 효율적 참조가 비효율적 O(n)

배열 연결 리스트 크기 고정 동적 주소 연속 불연속 데이터 참조 O(1) O(n) 삽입, 삭제 O(n) O(n)

추상 자료형 : 어떠한 데이터와 그 데이터에 대한 연산을 표기하는 것

연결 리스트의 추상자료형

  1. 모든 데이터 출력 printAll()

  2. 모든 데이터 제거 clear()

  3. 인덱스 삽입(원하는 인덱스에 데이터 삽입) insertAt(index, data);

  4. 마지막 삽입(마지막 데이터 뒤에 데이터 삽입) insertLast(data);

  5. 인덱스 삭제(원하는 인덱스 데이터 삭제) deleteAt(index);

  6. 마지막 삭제(마지막 데이터 삭제) deleteLast();

  7. 인덱스 읽기(원하는 인덱스 데이터 읽기) getNodeAt(index);

답변 0