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

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

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

 

1강. 운영체제의 필요성

  • 컴퓨터는 운영체제 없이도 동작 가능

    • 단, 초기 설계된 기능만 수행 (예: 유선전화)

    • 추가적인 기능 실행 불가

  • 운영체제가 하는 일

    1. 프로세스 관리 → 여러 프로그램을 동시에 실행 가능 (예: 노래를 들으며 게임 실행)

    2. 메모리 관리 → 모든 프로그램은 메모리에서 실행되므로 효율적 관리 필요

    3. 하드웨어 관리 → 운영체제가 저장장치와 직접 소통 (예: 하드디스크 데이터 저장)

    4. 파일 시스템 관리 → 데이터 저장 및 접근 방식 관리


2강. 운영체제 발전 과정

  • 1950년대: 싱글 스트림 배치 시스템 → 한 번에 하나의 작업 실행

  • 1960년대: 시분할 시스템 → 여러 사용자가 CPU를 번갈아가며 사용


3강. 운영체제의 구조

  • 운영체제 핵심: 커널

    • 프로세스, 메모리, 저장장치 관리

    • 사용자와의 인터페이스 제공

      • GUI (Graphical User Interface) → 그래픽 기반

      • CLI (Command Line Interface) → 명령어 기반

    • 응용 프로그램과의 연결시스템 콜(직접 접근 방지, 메모리 충돌 방지)

    • 하드웨어 제어드라이버를 통해 하드웨어 제어


4강. CPU와 메모리

  • CPU 구성 요소

    1. 제어장치 → 모든 장치의 동작 지시 및 제어

    2. 산술논리연산장치(ALU) → 데이터 연산 수행

    3. 레지스터 → 계산을 위한 임시 저장소 (변수 역할)

  • 메모리 종류

    • RAM (휘발성 메모리): 저장 위치와 관계없이 동일한 속도로 접근 가능, 전원 차단 시 데이터 소멸

    • ROM (비휘발성 메모리): 한 번 저장하면 수정 불가, 컴퓨터 부팅 관련 데이터(BIOS) 저장


5강. 컴퓨터 부팅 과정

  1. 전원 ON → ROM의 BIOS 실행

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

    • 이상 발견 시 부팅 중단

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

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

  4. 운영체제 로딩 및 실행


6강. 입출력과 인터럽트

  • CPU의 입출력 작업 처리 방식

    1. 폴링(Polling) → 주기적으로 입출력 상태 확인 (비효율적)

    2. 인터럽트(Interrupt) → 폴링의 단점 해결

      • 하드웨어 인터럽트 → 입출력 장치가 완료되었을 때 CPU에 신호

      • 소프트웨어 인터럽트 → 프로그램에서 발생 (예: 유효하지 않은 메모리 접근, 0으로 나누기 오류 등)

 

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

  • 프로그램: 저장 장치에 저장된 명령문의 집합. 실행되지 않는 수동적인 존재.

  • 프로세스: 실행 중인 프로그램으로, 프로그램이 메모리에 올라가 실행되는 상태.

    • 프로그램 vs 프로세스:

      • 프로그램은 저장 장치만 사용하지만,

      • 프로세스는 메모리, CPU, 입출력 자원을 활용하는 능동적인 존재.

프로세스의 구조

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

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

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

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


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

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

  • 유니프로그래밍: 메모리에 하나의 프로세스만 존재.

  • 멀티프로그래밍: 메모리에 여러 개의 프로세스가 올라와 실행됨.

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

  • 멀티프로세싱: CPU가 여러 개의 프로세스를 동시에 처리하는 방식.

  • 현대 운영체제는 멀티프로그래밍과 멀티프로세싱이 공존.

스와핑(Swapping)


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

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

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

PCB 주요 정보:

  • 포인터

  • 프로세스 상태 (생성, 준비, 실행, 대기, 완료)

  • 프로세스 ID

  • 프로그램 카운터

  • 레지스터 정보

  • 메모리 관련 정보

  • CPU 스케줄링 정보 등


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);

댓글을 작성해보세요.

채널톡 아이콘