4주차 - park-gyubi/Computer GitHub Wiki
1-1. 운영체제는 무엇을 하는가
운영체제(OS)
- 컴퓨터의 하드웨어와 소프트웨어 자원을 관리하고 프로그램이 실행될 수 있도록 하는 시스템 소프트웨어
- 사용자와 응용 프로그램이 하드웨어를 직접 제어하지 않아도 사용할 수 있도록 중간에서 연결함.
- 사용자/응용 프로그램 ↔ 운영체제 ↔ 하드웨어 구조로 동작함.
운영체제의 위치
-
사용자와 하드웨어 사이에서 동작함.
-
일반적인 구조
- 사용자
- 응용 프로그램
- 운영체제
- 하드웨어
운영체제의 주요 관리 대상
- CPU
- 메모리
- 파일
- 입출력장치
운영체제의 주요 역할
- CPU와 메모리 등의 자원을 여러 프로그램에 배분
- 프로그램의 실행과 종료 관리
- 파일과 폴더 관리
- 키보드, 마우스, 프린터 등의 장치 관리
- 프로그램과 사용자의 권한 관리 및 시스템 보호
- 여러 프로그램이 동시에 실행될 수 있도록 지원
사용자 모드와 커널 모드
-
사용자 모드
- 일반 응용 프로그램이 동작하는 영역
- 시스템 전체에 영향을 줄 수 있는 중요한 작업을 직접 수행하지 못하도록 제한됨.
-
시스템 호출(System Call)
- 응용 프로그램이 운영체제의 기능을 요청하는 방법
- 파일 접근이나 장치 사용 등이 필요할 때 운영체제에 요청함.
-
커널 모드
- 운영체제의 핵심 기능이 동작하는 영역
- CPU, 메모리, 장치 등의 중요한 자원에 접근 가능
-
보호된 통로를 통해 사용자 프로그램과 운영체제가 연결됨.
운영체제의 보호와 안정성
- 프로세스를 서로 분리하여 한 프로그램의 문제가 다른 프로그램에 영향을 주는 것을 줄임.
- 권한을 검사하여 허용되지 않은 작업을 제한함.
- 파일과 장치 접근 권한을 관리함.
- 오류가 발생했을 때 복구할 수 있도록 관리함.
멀티태스킹 사례
- 문서 작성
- 음악 재생
- 파일 저장
- 여러 프로그램이 동시에 실행되는 것처럼 보이지만 운영체제가 CPU와 자원을 나누어 사용하도록 관리함.
1-2. 컴퓨터의 시작과 부팅
부팅(Booting)
- 컴퓨터의 전원을 켠 뒤 운영체제를 사용할 수 있는 상태까지 준비하는 과정
- 하드웨어 준비 → 운영체제 적재 → 시스템 서비스 실행 → 사용자 로그인 등의 과정으로 진행됨.
기본 부팅 순서
- 전원 켜기
- 하드웨어 점검
- 부팅 장치 찾기
- 부트 로더 실행
- 커널 실행
- 로그인 
- 프로세스 안에서 실제 작업을 수행하는 실행 흐름
- 하나의 프로세스 안에 여러 스레드가 존재할 수 있음.
- 여러 스레드를 이용하면 하나의 프로그램에서도 여러 작업을 나누어 처리할 수 있음.
프로세스 상태
-
준비(Ready)
- CPU를 사용할 준비가 되어 대기하는 상태
-
실행(Running)
- CPU를 배정받아 명령을 처리하고 있는 상태
-
대기(Waiting)
- 입출력 등의 작업이 끝나기를 기다리는 상태
-
완료
- 실행을 모두 마친 상태 
- CPU가 실행 중이던 작업을 다른 작업으로 바꾸는 과정
- 기존 프로세스의 실행 상태를 저장
- 다른 프로세스를 실행
- 다시 돌아올 때 저장했던 상태를 복원
- 문맥 교환에도 일정한 시간이 필요하므로 너무 자주 발생하면 성능 저하가 발생할 수 있음.
여러 코어
-
CPU 코어가 여러 개라면 여러 작업을 실제로 동시에 실행할 수 있음.
-
단일 코어
- 여러 작업을 매우 빠르게 번갈아 실행
-
여러 코어
- 서로 다른 코어에서 여러 작업을 동시에 실행 가능
-
코어가 많다고 해서 모든 작업이 자동으로 완전히 병렬화되는 것은 아님.
동시성과 병렬성
-
동시성
- 여러 작업이 일정 시간 동안 번갈아 진행되는 방식
-
병렬성
- 여러 CPU 코어에서 여러 작업이 실제로 동시에 실행되는 방식
공유 자원과 동기화
-
여러 스레드가 같은 데이터를 동시에 수정하면 실행 순서에 따라 잘못된 결과가 발생할 수 있음.
-
이를 경쟁 상태(Race Condition)라고 함.
-
공유 자원에 동시에 접근하지 못하도록 동기화가 필요함.
-
예시
- 스레드 A와 B가 같은 값을 동시에 읽고 수정하면 예상하지 못한 결과가 발생할 수 있음.
- 뮤텍스(Mutex) 등을 이용하여 한 번에 하나의 스레드만 공유 자원에 접근하도록 제한
멀티태스킹
- 운영체제의 상태 관리
- CPU 스케줄링
- 대기
- 문맥 교환
- 위 과정이 반복되면서 여러 프로그램이 동시에 실행되는 것처럼 동작함.
1-4. 운영체제의 메모리 관리
메모리 관리
- 실행 중인 프로그램이 사용할 RAM 공간을 운영체제가 관리함.
- 각 프로세스에 필요한 메모리를 할당하고 서로의 메모리를 침범하지 않도록 보호함.
프로세스별 메모리 공간
- 각 프로세스는 자신만의 메모리 공간을 사용하는 것처럼 동작함.
- 운영체제가 프로세스 A, B, C 등의 메모리 영역을 관리하고 보호함.
가상 메모리
- 각 프로세스에 독립적인 가상 주소 공간을 제공하는 방식
- 프로그램은 실제 RAM의 물리 주소를 직접 사용하는 대신 가상 주소를 사용함.
- 운영체제와 하드웨어가 가상 주소를 실제 물리 주소와 연결함.
가상 주소와 물리 주소
- 프로그램이 사용하는 주소 → 가상 주소
- 실제 RAM의 위치 → 물리 주소
- MMU(Memory Management Unit)가 주소 변환을 수행함.
- 운영체제가 관리하는 페이지 테이블을 이용하여 가상 주소를 물리 주소에 연결함. 
-
프로그램이 필요로 하는 페이지가 현재 RAM에 존재하지 않을 때 발생
-
처리 과정
- 프로그램이 페이지에 접근
- RAM에 페이지가 없는 것을 확인
- 운영체제가 필요한 데이터를 저장장치에서 읽음.
- RAM에 적재
- 페이지 테이블 갱신
- 프로그램 실행 재개
가상 메모리와 저장장치
- RAM이 부족하면 일부 데이터를 저장장치로 옮겨 공간을 확보할 수 있음.
- 필요한 데이터가 다시 사용되면 저장장치에서 RAM으로 가져옴.
교체
- RAM 공간이 부족할 때 기존 페이지 중 일부를 제거하고 필요한 페이지를 가져오는 과정
스왑(Swap)
- RAM의 데이터를 저장장치로 옮겨 메모리 공간을 확보하는 방식
- 저장장치는 RAM보다 느리므로 스왑이 많이 발생하면 성능이 크게 저하될 수 있음.
스래싱(Thrashing)
- RAM 부족으로 페이지를 계속 저장장치와 RAM 사이에서 교체하는 상태
- 실제 프로그램 실행보다 페이지 교체에 더 많은 시간이 사용되어 시스템이 매우 느려질 수 있음.
- 교체가 지나치면 스래싱이 발생함.
메모리 부족 관찰
-
확인할 수 있는 주요 지표
- 메모리 사용률
- 디스크 활동
- 응답 지연
-
RAM 사용률이 높고 디스크 사용이 지속적으로 증가하면서 시스템이 느려진다면 메모리 부족과 스왑 사용을 의심할 수 있음.
메모리 보호
-
페이지마다 접근 권한을 설정할 수 있음.
-
예시
- 읽기(R)
- 쓰기(W)
- 실행(X)
-
프로세스의 메모리 공간을 서로 분리하여 다른 프로세스의 메모리를 임의로 수정하지 못하도록 보호함.
1-5. 장치 드라이버와 입출력 관리
입출력 관리
- 운영체제는 프로그램과 실제 하드웨어 장치 사이에서 입출력 요청을 관리함.
- 프로그램이 각 하드웨어의 세부 동작 방식을 직접 처리하지 않아도 되도록 함.
입출력 계층
- 응용 프로그램
- 시스템 호출
- 운영체제의 입출력 계층
- 장치 드라이버
- 장치 제어기
- 실제 장치
장치 드라이버
- 운영체제와 특정 하드웨어 장치 사이에서 명령을 전달하는 소프트웨어
- 운영체제의 공통 요청을 각 장치가 이해할 수 있는 방식으로 변환함.
- 장치별 명령 번역기 역할을 함.
드라이버의 역할
- 프로그램의 입출력 요청을 운영체제가 받음.
- 운영체제가 적절한 드라이버를 호출함.
- 드라이버가 장치에 맞는 명령으로 변환함.
- 장치가 실제 작업을 수행함.
- 결과가 다시 운영체제와 프로그램으로 전달됨.
플러그 앤 플레이(Plug and Play)
-
새로운 장치를 연결했을 때 운영체제가 장치를 식별하고 적절한 드라이버를 선택하여 사용할 수 있도록 설정하는 기능
-
과정
- 장치 감지
- 식별
- 드라이버 선택
- 설정
인터럽트(Interrupt)
- 장치가 작업을 완료했거나 CPU의 처리가 필요할 때 CPU에 이를 알리는 신호
- CPU가 장치의 상태를 계속 반복해서 확인하지 않아도 됨.
- 인터럽트가 발생하면 CPU가 필요한 처리를 수행한 뒤 원래 작업으로 돌아감.
폴링(Polling)
- CPU가 장치의 상태를 반복적으로 확인하는 방식
- 장치의 작업 완료 여부를 계속 질문하는 것과 비슷함.
- 단순하지만 반복 확인 과정에서 CPU 자원이 사용될 수 있음.
폴링과 인터럽트 비교
-
폴링
- CPU가 반복해서 장치 상태를 확인
-
인터럽트
- 장치가 필요한 순간 CPU에 알림
-
기다리는 동안 CPU는 다른 작업을 수행할 수 있음.
DMA
- Direct Memory Access
- 장치와 RAM 사이의 대량 데이터 전송을 CPU가 매번 직접 복사하지 않고 처리하도록 하는 방식
- CPU가 전송을 설정하면 DMA가 장치 ↔ RAM 사이의 데이터 이동을 담당함.
- 대량 데이터 전송에서 CPU의 반복 복사 부담을 줄일 수 있음.
입출력 속도 차이
-
CPU와 입출력 장치는 처리 속도가 서로 다름.
-
운영체제는 속도 차이를 조정하기 위해 여러 방법을 사용함.
-
버퍼링
- 데이터를 임시 공간에 모아 처리
-
캐싱
- 자주 사용하는 데이터를 빠른 저장 공간에 보관
-
스풀링
- 장치가 처리할 작업을 대기열에 저장하여 순서대로 처리
프린터와 스풀링
- 여러 인쇄 요청이 들어오면 운영체제가 인쇄 작업을 대기열에 저장함.
- 프린터가 한 작업씩 순서대로 처리함.
- 프로그램은 인쇄가 모두 끝날 때까지 계속 기다리지 않고 다른 작업을 수행할 수 있음.
인쇄 과정
- 인쇄 버튼
- 대기열 등록
- 드라이버 변환
- 프린터 전송
- 출력 완료
장치 문제 진단
- 장치
- 연결
- 인식
- 대기열
- 드라이버
- 순서로 확인하여 문제가 발생한 위치를 찾을 수 있음.
2-1. 파일과 폴더 그리고 경로
파일(File)
- 데이터를 저장장치에 저장하기 위한 기본 단위
- 파일 이름과 파일에 저장된 실제 데이터로 구성됨.
- 문서, 사진, 음악, 프로그램 등 다양한 데이터를 파일로 저장함.
폴더(Folder)
- 파일과 다른 폴더를 분류하고 정리하기 위한 공간
- 하나의 폴더 안에 여러 파일과 하위 폴더를 둘 수 있음.
폴더 트리
-
폴더 안에 다른 폴더가 포함되는 계층 구조
-
예시
-
학기
-
과목
-
주차
- 과제.txt
-
-
-
-
자료가 많아질수록 일정한 계층 구조를 사용하는 것이 관리에 유리함. 
- 저장장치에 파일과 폴더를 저장하고 관리하기 위한 운영체제의 규칙과 구조
- 파일의 이름, 위치, 크기, 권한 등의 정보를 관리함.
- 운영체제가 저장장치의 데이터를 파일과 폴더 형태로 사용할 수 있도록 함.
파일 시스템의 역할
- 파일 생성과 삭제
- 파일 읽기와 쓰기
- 폴더 구조 관리
- 저장 공간 관리
- 파일 위치 관리
- 파일 권한 관리
파일의 메타데이터
-
파일 자체의 내용이 아니라 파일을 관리하기 위한 정보
-
예시
- 파일 이름
- 파일 크기
- 생성 시간
- 수정 시간
- 소유자
- 접근 권한
파일과 실제 저장 위치
- 사용자는 파일 이름과 경로를 이용하여 파일에 접근함.
- 운영체제와 파일 시스템은 해당 파일의 실제 데이터가 저장장치의 어느 위치에 있는지 관리함.
- 사용자가 저장장치의 물리적인 위치를 직접 관리할 필요가 없음.
대표적인 파일 시스템
-
NTFS
- Windows에서 주로 사용
-
FAT32
- 다양한 운영체제와 장치에서 높은 호환성을 가짐.
-
exFAT
- USB 메모리나 외장 저장장치 등에 많이 사용
-
ext4
- Linux에서 널리 사용
파일 시스템 선택
-
저장장치의 사용 목적에 따라 적절한 파일 시스템이 달라질 수 있음.
-
고려할 요소
- 운영체제 호환성
- 파일 크기
- 저장장치 크기
- 권한 및 보안 기능
2-3. 파일 읽기와 쓰기
파일 접근
- 프로그램이 파일을 사용하려면 운영체제에 파일 접근을 요청함.
- 응용 프로그램이 저장장치를 직접 제어하는 것이 아니라 운영체제를 통해 접근함.
파일 열기
- 프로그램이 파일의 경로와 원하는 작업을 운영체제에 전달함.
- 운영체제가 파일의 존재 여부와 접근 권한 등을 확인함.
- 문제가 없다면 프로그램이 파일을 사용할 수 있도록 함.
파일 읽기 과정
- 프로그램에서 파일 읽기 요청
- 운영체제가 파일 시스템에 요청
- 파일 시스템이 데이터 위치 확인
- 저장장치에서 데이터 읽기
- 메모리로 데이터 전달
- 프로그램이 데이터 사용
파일 쓰기 과정
- 프로그램에서 저장 요청
- 운영체제가 데이터를 전달받음.
- 파일 시스템이 저장할 위치를 결정함.
- 저장장치에 데이터 기록
- 파일 크기와 수정 시간 등의 메타데이터 갱신
버퍼(Buffer)
- 데이터를 바로 장치에 전달하지 않고 메모리에 임시로 모아두는 공간
- 작은 데이터를 매번 저장장치에 기록하는 것보다 여러 데이터를 모아서 처리하면 효율적일 수 있음.
캐시(Cache)
- 자주 사용하는 파일 데이터를 메모리에 보관하여 저장장치에 반복적으로 접근하는 횟수를 줄임.
- 같은 데이터를 다시 사용할 때 빠르게 접근할 수 있음.
안전한 제거
- USB 등의 저장장치에 대한 쓰기 작업이 아직 끝나지 않았을 수 있음.
- 안전한 제거를 사용하면 남아 있는 쓰기 작업을 완료한 후 장치를 분리할 수 있음.
- 기록 중 장치를 갑자기 제거하면 데이터 손상이나 파일 시스템 오류가 발생할 수 있음.
2-4. 파일 권한과 보안
파일 권한
- 어떤 사용자나 프로그램이 파일에 어떤 작업을 할 수 있는지 정하는 규칙
- 운영체제가 파일과 폴더에 대한 접근을 통제함.
기본 권한
-
읽기(Read)
- 파일의 내용을 확인할 수 있는 권한
-
쓰기(Write)
- 파일의 내용을 수정할 수 있는 권한
-
실행(Execute)
- 프로그램이나 파일을 실행할 수 있는 권한
사용자와 권한
- 운영체제는 사용자 계정을 구분하여 각 사용자에게 서로 다른 권한을 부여할 수 있음.
- 모든 사용자가 모든 파일에 접근할 수 있도록 하면 중요한 데이터가 변경되거나 삭제될 위험이 있음.
최소 권한 원칙
- 사용자나 프로그램에는 작업을 수행하는 데 필요한 최소한의 권한만 부여하는 것이 안전함.
- 필요 이상의 관리자 권한을 사용하면 문제가 발생했을 때 피해 범위가 커질 수 있음.
관리자 권한
- 시스템 설정 변경이나 중요한 파일 수정 등 일반 사용자보다 많은 작업을 수행할 수 있음.
- 강력한 권한을 가지므로 필요한 경우에만 사용하는 것이 안전함.
권한과 시스템 보호
- 일반 프로그램이 운영체제의 중요한 영역을 마음대로 수정하지 못하도록 제한
- 사용자별 파일 접근 제한
- 시스템 파일 보호
- 허용되지 않은 프로그램의 접근 제한
2-5. 삭제와 복구
파일 삭제
- 파일을 삭제했다고 해서 저장장치에서 데이터가 항상 즉시 완전히 사라지는 것은 아님.
- 운영체제와 파일 시스템은 해당 파일이 사용하던 공간을 다시 사용할 수 있는 공간으로 표시할 수 있음.
휴지통
- 일반적인 파일 삭제에서는 파일을 바로 완전히 제거하지 않고 휴지통으로 이동할 수 있음.
- 사용자가 실수로 삭제한 파일을 복원할 수 있도록 함.
영구 삭제
- 휴지통을 거치지 않고 삭제하거나 휴지통을 비우면 일반적인 방법으로 복원하기 어려워짐.
- 그러나 저장 공간이 새로운 데이터로 덮어쓰이지 않았다면 복구 프로그램으로 일부 데이터를 복구할 가능성이 있을 수 있음.
덮어쓰기
- 삭제된 파일이 사용하던 저장 공간에 새로운 데이터가 기록되는 것
- 덮어쓰기가 진행될수록 기존 데이터의 복구 가능성이 낮아짐.
삭제 후 주의할 점
- 중요한 파일을 실수로 삭제했다면 해당 저장장치의 사용을 가능한 한 줄이는 것이 중요함.
- 새로운 파일을 계속 저장하면 삭제된 데이터 영역이 덮어써질 수 있음.
백업
- 중요한 데이터를 다른 저장장치나 위치에 복사하여 보관하는 것
- 파일 손상, 실수로 인한 삭제, 저장장치 고장 등에 대비할 수 있음.
3-1. 사용자 계정과 인증
사용자 계정
- 운영체제가 사용자를 구분하기 위한 정보
- 사용자마다 자신의 파일, 설정, 권한 등을 가질 수 있음.
인증(Authentication)
-
현재 접근하려는 사람이 실제 해당 계정의 사용자인지 확인하는 과정
-
예시
- 비밀번호
- PIN
- 지문
- 얼굴 인식
인증과 권한
-
인증
- 사용자가 누구인지 확인
-
권한
- 인증된 사용자가 무엇을 할 수 있는지 결정
-
로그인했다고 해서 모든 작업을 수행할 수 있는 것은 아님.
일반 사용자와 관리자
-
일반 사용자
- 일상적인 프로그램 실행과 파일 작업 등을 수행
- 시스템 전체에 영향을 주는 작업은 제한될 수 있음.
-
관리자
- 프로그램 설치
- 시스템 설정 변경
- 사용자 관리
- 중요한 시스템 작업 등을 수행할 수 있음.
계정 분리
- 여러 사용자가 같은 컴퓨터를 사용하더라도 계정을 분리하면 각 사용자의 파일과 설정을 구분하여 관리할 수 있음.
- 사용자별 접근 권한을 다르게 설정할 수 있음.
3-2. 운영체제와 보안
운영체제 보안
- 운영체제는 프로그램과 사용자가 시스템 자원에 접근하는 것을 통제함.
- 중요한 시스템 자원이 임의로 변경되는 것을 방지함.
보호해야 하는 자원
- CPU
- 메모리
- 파일
- 장치
- 사용자 정보
- 시스템 설정
프로세스 격리
- 각 프로세스가 독립적인 메모리 공간을 사용하도록 관리함.
- 한 프로그램이 다른 프로그램의 메모리를 임의로 읽거나 수정하는 것을 제한함.
- 프로그램 오류가 시스템 전체로 확산되는 것을 줄임.
권한 검사
- 파일이나 장치 등에 접근할 때 해당 작업을 수행할 권한이 있는지 운영체제가 확인함.
- 권한이 없다면 접근을 거부함.
사용자 모드와 커널 모드
- 일반 응용 프로그램은 제한된 사용자 모드에서 실행됨.
- 중요한 시스템 기능은 높은 권한을 가진 커널 모드에서 실행됨.
- 프로그램은 필요한 기능을 시스템 호출을 통해 운영체제에 요청함. , 수정 날짜, 파일 크기
10. 팀 과제 폴더의 대상별 권한 정하기
- 팀원: 읽고 쓰기
- 뷰어: 읽기
11. 새 앱 설치 전 다섯 가지 점검은?
- 출처 및 게시자, 요청 권한, 부가프로그램, 저장공간, 호환성
12. 과제 폴더의 3-2-1 계획을 그려 보세요.
- 원본 1개 복사본 2개 총 3개의 파일을 2개의 저장 매체에 각각 1개씩 저장.
13.멈춤부터 안전한 해결까지 순서를 말해 보세요.
- 증상 확인 후 CPU, 메모리, 디스크, 네트워크 사용량 확인 -> 문제를 일으키는 프로세스 확인 - > 안전하게 종료(필요시)