본문 바로가기

카테고리 없음

혼자 공부하는 컴퓨터구조 + 운영체제 9~11Chapter 요약정리

 
혼자 공부하는 컴퓨터 구조+운영체제
이 책은 독학으로 컴퓨터 구조와 운영체제를 배우는 입문자가 ‘꼭 필요한 내용을 제대로 학습’할 수 있도록 구성했다. 뭘 모르는지조차 모르는 입문자의 막연한 마음에 십분 공감하여 과외 선생님이 알려주듯 친절하게, 핵심 내용만 콕콕 집어 준다. 〈컴푸터 구조〉편에서는 컴퓨터를 이루고 있는 부품들과 각 부품의 역할을 알아본다. 또한 컴퓨터 내부의 구조와 작동법을 이해하고, 컴퓨터가 어떻게 명령어를 처리하는지 학습한다. 〈운영체제〉편에서는 운영체제의 필요성을 배운 뒤 앞서 배운 컴퓨터의 부품들을 운영체제가 어떻게 사용하는지 전체 과정을 살펴본다. ‘전공서가 너무 어려워서 쉽게 배우고 싶을 때’, ‘개발자가 되고 싶은데 뭐부터 봐야 하는지 모를 때’ ‘기술 면접을 제대로 준비해야 할 때’ 다른 입문서에서는 알려주지 않았던 진짜 컴퓨터 공학 지식을 〈혼자 공부하는 컴퓨터 구조+운영체제〉에서 만나 보자! 42명의 베타리더와 함께 입문자에게 꼭 맞는 난이도, 분량, 학습 요소 등을 적극 반영했다. 어려운 용어와 개념은 한 번 더 풀어 쓰고, 적절한 예시와 이해하기 쉬운 그림으로 누구나 이해할 수 있도록 구성했다. 또한 일상 소재를 활용한 비유를 활용하여 어렵게 느껴질 수 있는 컴퓨터 구조와 운영체제를 머릿속에 직접 그리듯이 설명해 준다. ‘혼자 공부해 본’ 여러 입문자의 초심과 눈높이가 책 곳곳에 반영된 것이 이 책의 가장 큰 장점이다.
저자
강민철
출판
한빛미디어
출판일
2022.08.16

혼자 공부하는 컴퓨터구조 + 운영체제 책 표지

 

안녕하세요 !
혼공단 11기로 선정 되어

공부하게 된 박지영입니다 🙂

매주 1회 혼자 공부하는 컴퓨터구조 + 운영체제 요약을 올리고 있습니다.

파이썬(코딩자율학습단), C언어(빡공단) 등 많은 프로그래밍 요약을 올리고 있을거니
다른 글도 많은 관심 부탁드립니다 🥰

 

Chapter 09 운영체제 시작하기

09-1 운영체제를 알아야 하는 이유

 

프로그램 실행에 마땅히 필요한 요소들은 시스템자원. 줄여서 자원이라고 합니다.

실행할 프로그램에 필요한 자원(시스템자원)을 할당하고, 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램이 운영체제 입니다.

 

운영체제는 인터넷 브라우저, 게임과 같은 프로그램 입니다.

항상 컴퓨터가 부팅될 때 메모리 내 커널 영역이라는 공간에 따로 적재되어 실행됩니다.

사용자가 이용하는 응용 프로그램이 적재되는 영역사용자 영역 이라고 합니다.

 

응용프로그램 : 사용자가 특정 목적을 위해 사용하는 일반적인 프로그램.

ex. 워드 프로세서, 인터넷 브라우저, 메모장, 게임

 

운영체제를 알아야 하는 이유?

1. 운영체제 덕분에 개발자는 하드웨어를 조작하는 코드를 직접 작성할 필요가 없습니다.

2. 운영체제와의 대화로 하드웨어와 프로그램을 더 깊이 이해하고 문제 해결의 실마리를 찾을 수 있습니다.

ex. 메모리 누수 현상, 잘못된 주소 참조

 

 

09-2 운영체제의 큰 그림

운영체제의 심장이라고 불리는 커널.

 

운영체제현존하는 프로그램 중 규모가 가장 큰 프로그램 중 하나입니다.

자원에 접근하고 조작하고 기능, 프로그램이 올바르고 안전하게 실행되게 하는 기능이 운영체제의 핵심 서비스에 속합니다.

이러한 운영체제의 핵심 서비스를 담당하는 부분커널 이라고 합니다.

 

커널운영체제의 핵심 기능을 담당합니다.

 

사용자 인터페이스는 윈도우의 바탕화면과 같이 사용자가 컴퓨터와 상호작용할 수 있는 통로

사용자 인터페이스의 종류그래픽 유저 인터페이스, 커맨드 라인 인터페이스가 있습니다.

 

그래픽 유조 인터페이스 : ex. 스마트폰, 컴퓨터의 바탕화면

커맨드 라인 인터페이스 : ex. cmd창(터미널)

 

이중모드CPU가 명령어를 실행하는 모드를 크게 사용자 모드와 커널 모드로 구분하는 방식

사용자모드는 운영체제 서비스를 제공받을 수 없는 실행모드 (커널영역의 코드를 실행 할 수 없는 모드)

 

커널모드는 운영체제 서비스를 제공받을 수 있는 실행모드 ( 커널 영역의 코드를 실행할 수 있는 모드)

 

사용자 모드로 실행되는 프로그램이 자원에 접근하는 운영체제 서비스를 제공받으려면 운영체제에 요청을 보내 커널 모드로 전환해야 합니다.

이때 운영체제 서비스를 제공받기 위한 요청시스템 호출(시스템 콜)이라고 합니다.

 

시스템 호출은 일종의 인터럽트. 정확히는 소프트웨어적인 인터럽트.

하지만 인터럽트를 발생시키는 특정 명령어에 의해 발생하기도 하는데, 이를 소프트웨어 인터럽트라고 합니다.

 

운영체제의 핵심 서비스

- 프로세스 관리 : 실행중인 프로그램을 프로세스라고 하는데 그것을 관리합니다.

- 자원 접근 및 할당

1. CPU 스케줄링 : 공정하게 CPU를 할당하기 위해 어떤 프로세스부터 CPU를 이용하게 할 것인지, 얼마나 오래 CPU를 이용할지 결정

2. 메모리 : 메모리에 적재된 프로세스들은 크기도, 적재되는 주소도 가지각색. 어느 주소에 적재해야 할지를 결정

3. 입출력장치 : 인터럽트 서비스 루틴은 운영체제가 제공하는 기능으로 커널영역에 있고, 하드웨어 인터럽트도 마찬가지입니다.

운영체제는 인터럽트를 처리하는 프로그램, 즉 인터럽트 서비스 루틴을 제공함으로써 입출력 작업을 수행

- 파일 시스템 관리 : 파일을 열고, 생성, 삭제하고 파일들을 묶어 디렉터리(폴더)관리하는 것

 

가상머신 : 소프트웨어적으로 만들어낸 가상 컴퓨터.

가상 머신을 설치하면 새로운 운영체제와 응용 프로그램을 설치하고 실행할 수 있다.

 

시스템 호출의 종류

종류 시스템 호출 설명
프로세스 관리 fork() 새 자시기 프로세스 생성
execve() 프로세스 실행
exit() 프로세스 종료
waitpid() 자식 프로세스가 종료할 때 까지 대기
파일 관리 open() 파일 열기
close() 파일 닫기
read() 파일 읽기
write() 파일 쓰기
stat() 파일 정보 획득

 

디렉터리 관리 chdir() 작업 디렉터리 변경
mkdir() 디렉터리 생성
rmdir() 비어 있는 디렉터리 삭제
파일 시스템 관리 mount() 파일 시스템 마운트
umount() 파일 시스템 마운트 해제

 

 

Chapter 10 프로세스와 스레드

10-1 프로세스 개요

 

실행중인 프로그램 == 프로세스

 

프로세스는 윈도우 작업 관리자로 확인 가능합니다 !

 

사용자가 보는 앞에서 실행되는 프로세스 : 포그라운드 프로세스사용자가 보지 못하는 뒤편에서 실행되는 프로세스 : 백그라운드 프로세스(유닉스에서는 데몬, 윈도우에서는 서비스 라고 부릅니다)

 

운영체제는 빠르게 번갈아 수행되는 프로세스의 실행 순서를 관리하고, 프로세스에 CPU를 비롯한 자원을 배분 : 프로세스 제어 블록(PCB)

 

PCB는 커널 영역에 생성, 수많은 프로세스들 사이에서 PCB로 특정 프로세스를 식별하고 해당 프로세스를 처리하는 데 필요한 정보 판단

 

PCB에 담기는 정보

1. 프로세스 ID(PID) : 특정 프로세스를 식별하기 위해 부여하는 고유한 번호2. 레지스터 값 : 프로세스는 자신의 실행 차례가 돌아오면 이전까지 사용했던 레지스터의 중간값들을 모두 복원. 그래야 이전 작업을 이어 진행 가능하기 때문에. 그래서 PCB 안에는 해당 프로세스가 실행하며 사용했던 프로그램 카운터를 비롯한 레지스터 값들이 담깁니다.3. 프로세스 상태 : 현재 프로세스가 어떤 상태인지도 PCB에 기록되어야 합니다.

입출력 장치를 사용하기 위해 기다리는 상태인지, 이용하는 상태인지 등의 프로세스 상태 정보가 PCB에 들어간다.

4. CPU 스케줄링 정보 : CPU가 언제, 어떤순서로 할당받을지에 대한 정보가 PCB에 기록5. 메모리 관리 정보 : PCB에는 프로세스가 어느 주소에 저장되어 있는지에 대한 정보가 있어야 합니다.6. 사용한 파일과 입출력장치 목록 : 프로세스가 실행 과정에서 특정 입출력장치나 파일을 사용하면 PCB에 해당 내용이 명시됩니다.

어떤 입출력장치가 이 프로세스에 할당되었는지, 어떤 파일들을 열었는지에 대한 정보들이 PCB에 기록

 

문맥 교환

중간 정보, 즉 하나의 프로세스 수행을 재개하기 위해 기억해야 할 정보 : 문맥

하나의 프로세스 문맥은 해당 프로세스의 PCB에 표현되어 있습니다.

 

이처럼 기존 프로세스의 문맥을 PCB에 백업하고,

새로운 프로세스를 실행하기 위해 문맥을 PCB로부터 복구하여 새로운 프로세스를 실행하는 것문맥교환이라고 합니다.

 

프로세스의 메모리 영역

- 코드 영역(텍스트 영역) : 실행할 수 있는 코드, 즉 기계어로 이루어진 명령어가 저장

- 데이터 영역 : 잠깐 썼다가 없앨 데이터가 아닌 프로그램이 실행되는 동안 유지할 데이터가 저장되는 공간

데이터로는 전역변수가 대표적입니다.

코드 영역과 데이터 영역은 크기가 고정된 영역이라는 점 : 정적 할당 영역

힙 영역과 스택 영역은 프로세스 실행 과정에서 그 크기가 변할 수 있는 영역 : 동적 할당 영역

- 힙 영역 : 프로그램을 만드는 사용자, 즉 프로그래머가 직접 할당할 수 있는 저장 공간입니다.

메모리 공간을 반환하지 않는다면 할당한 공간은 메모리 내에 계속 남아 메모리 낭비를 초래하는 문제메모리 누수 입니다.

- 스택 영역 : 데이터를 일시적으로 저장하는 공간

함수의 실행이 끝나면 사라지는 매개 변수, 지역 변수가 대표적입니다.

 

10-2 프로세스 상태와 계층 구조

프로세스 상태

- 생성 상태(new) : 메모리에 적재되어 PCB를 할당받은 상태. CPU의 할당을 기다립니다.

- 준비 상태(ready) : 자신의 차례가 아니기에 CPU에 할당받아 실행하기를 기다리는 상황

- 실행 상태(running) : CPU를 할당받아 실행중인 상태. 일정 시간 동안만 CPU 사용할 수 있습니다.

- 대기 상태 : 프로세스가 입출력 잡업을 하면 대기상태가 된다 (말그대로 대기하는 상황)

- 종료 상태(terminated) : 프로세스가 종료된 상태. 프로세스가 사용한 메모리를 정리

298P 프로세스 상태 다이어 그램

 

프로세스 계층 구조부모 프로세스자식 프로세스가 있다.

일부 운영체제에서는 자식 프로세스의 PCB에 부모 프로세스의 PID인 PPID가 기록되기도 합니다. (부모가 자식에게 물려주는)

 

299P 프로세스 계층 구조

 

프로세스 생성 기법

- 부모 프로세스를 통해 생성된 자식 프로세스들은 복제와 옷 갈아입기를 통해 실행됩니다.

- fork는 자신의 복사본을 자식 프로세스로 생성

- exec는 자신의 메모리 공간을 다른 프로그램으로 교체

 

10-3 스레드

스레드 : 실행의 단위

실행의 흐름 단위가 하나라는 점에서 이렇게 실행되는 프로세스들 : 단일 스레드 프로세스

스레드는 일을 동시에 처리할 수 있고, 프로세스를 구성하는 여러 명령어를 동시에 실행할 수 있는 : 멀티 스레드 프로세스

(여러 프로세스를 동시 실행 : 멀티프로세스, 여러 스레드로 프로세스를 동시 실행 : 멀티스레드)

◎ 스레드끼리는 프로세스 내의 자원을 공유

 

프로세스끼리는 기본적으로 자원을 공유하지는 않지만

프로세스 간의 자원을 공유하고 데이터를 주고받는 것 : 프로세스 간 통신(IPC)

서로의 파일 속 데이터를 주고받는 것 : 파일을 통한 프로세스 간 통신서로 공유하는 메모리 영역을 두어 데이터를 주고받는 것 : 공유 메모리

 

 

Chapter 11 CPU 스케줄링

11-1 CPU 스케줄링 개요

CPU 스케줄링 : 운영체제가 프로세스들에게 공정하고 합리적으로 CPU 자원을 배분하는 것

 

프로세스 우선순위

(프로세스마다 우선순위가 다르기 때문)

- 입출력 집중 프로세스 : 실행 상태 보다는 입출력을 위한 대기상태에 더 많이 머무름

- CPU 집중 프로세스 : 대기 상태보다는 실행 상태에 더 많이 머무름

 

CPU를 이용하는 작업을 CPU버스트, 입출력장치를 기다리는 작업을 입출력 버스트.

 

스케줄링 큐 : CPU를 사용하고 싶은 프로세스들, 메모리에 적재되고 싶은 프로세스들,

특정 입출력장치를 사용하고 싶은 프로세스들을 모두 세움. (이 줄이 스케줄링 큐)

- 준비 큐 : CPU를 이용하고 싶은 프로세스들이 서는 줄

- 대기 큐 : 입출력장치를 이용하기 위해 대기 상태에 접어든 프로세스들이 서는 줄

 

선점형과 비선점형 스케줄링

 

선점형 스케줄링 : 프로세스가 CPU를 비롯한 자원을 사용하고 있더라도

운영체제가 프로세스로부터 자원을 강제로 빼앗아 다른 프로세스에 할당할 수 있는 스케줄링 방식

ex. 줄을 서 있는데 뒤에 사람이 "비켜 내가 먼저 쓸래" 라고 하는 것

- 장점 : 한 프로세스의 자원 독점을 막는다

- 단점 : 문맥교환 과정에서 오버헤드가 발생할 수 있다

 

비선점형 스케줄링 : 하나의 프로세스가 자원을 사용하고 있다면 그 프로세스가 종료되거나 스스로 대기 상태에 접어들기 전까진다른 프로세스가 끼어들 수 없는 스케줄링 방식

ex. 줄 서있어도 먼저 새치기 안됨

- 장점 : 오버헤드 발생률이 비교적 적- 단점 : 무작정 계속 기다려야하고, 자원 독점이 있을 수 있다

 

11-2 CPU 스케줄링 알고리즘

CPU 스케줄링 알고리즘 종류

- 선입 선처리 스케줄링(FCFS 스케줄링) : 준비 큐에 삽입된 순서대로 프로세스들을 처리하는 비선점형 스케줄링 방식

무작정 기다려야하는 호위효과 현상이 발생할 수 있다.

 

- 최단 작업 우선 스케줄링(SJF 스케줄링) : 준비 큐에 삽입된 프로세스들 중

CPU 이용 시간의 길이가 가장 짧은 프로세스부터 실행하는 스케줄링 방식 (선점형 최단 작업 우선 스케줄링)

 

- 라운드 로빈 스케줄링 : 선입 선처리 스케줄링타임 슬라이스라는 개념이 더해진 스케줄링 방식

타임 슬라이스 : 각 프로세스가 CPU를 사용할 수 있는 정해진 시간을 의미.

정해진 타임 슬라이스만큼의 시간 동안 돌아가며 CPU를 이용하는 선점형 스케줄링

 

- 최소 잔여 시간 우선 스케줄링(SPT 스케줄링) : 최단 작업 우선 스케줄링 알고리즘과 라운드 로빈 알고리즘을 합친 스케줄링 방식

작업시간이 짧은 프로세스부터 처리하는 선점형 스케줄링 알고리즘

 

- 우선순위 스케줄링 : 프로세스들에 우선순위를 부여하고, 가장 높은 우선순위를 가진 프로세스부터 실행하는 스케줄링 알고리즘

우선순위가 높은 프로세스들에 의해 실행이 계속해서 연기될 수 있다. (기아현상)

기아현상을 방지하기 위해 에이징이라는 것이 있습니다.

에이징은 오랫동안 대기한 프로세스의 우선순위를 점차 높이는 방식

 

- 다단계 큐 스케줄링 : 우선순위 스케줄링발전된 형태, 우선순위별로 준비 큐를 여러 개 사용하는 스케줄링 방식

 

- 다단계 피드백 큐 스케줄링 : 다단계 큐 스케줄링과 같지만 다른 점 하나는 프로세스들이 큐 사이를 이동할 수 있다는 점입니다.

새로 준비 상태가 된 프로세스가 있다면 우선순위가 가장 높은 우선운쉬 큐에 삽입되고 일정시간(타임 슬라이스) 동안 실행

 

이렇게 혼공단 컴퓨터구조 + 운영체제 4주차 9~11파트 요약 정리를 마쳤습니다.

 

이제 미션을 해볼까요??

 

4주차
(1/22 ~ 1/28)
Chapter 09 ~ 11 p. 304의 확인 문제 1번 풀고 인증하기 Ch.11(11-2) 준비 큐에 A,B,C,D 순으로 삽입되었다고 가정했을 때, 선입 선처리 스케줄링 알고리즘을 적용하면 어떤 프로세스 순서대로 CPU를 할당받는지 풀어보기

 

기본 미션 인증

p304 확인문제 1번

 

선택미션 인증

 

준비 큐에 A,B,C,D 순으로 삽입되었다고 가정했을 때, 선입 선처리 스케줄링 알고리즘을 적용하면

어떤 프로세스 순서대로 CPU를 할당받는지 풀어보기

 

나의 풀이

선입 선처리 스케줄링은 삽입된 순서대로 프로세서를 처리하므로

A,B,C,D 순으로 삽입되었으니 A,B,C,D순으로 처리 되며 CPU를 할당받을 것 같아요!

 

이렇게 4주차도 잘 마쳤는데

저번 10기때는 혼공파와 혼공자 2가지를 동시에 하다가

너무 힘들었어서 요약정리도 빨리 못했던 기억이 있는데

오늘은 방학이어서 그런지 .. 더 하고 싶어서 미치겠네요 ㅋㅋㅋㅋ

 

혼공족장님 !

혼공학습단 12기 빨리 해주시면 감사할 것 같아요

제가 혼공단 팬처럼 10기때부터 계속 참여할 계획인데

 

정말로 빡공단, 코딩 자율 학습단, 코칭스터디 등 많이 해보았는데 혼공단이 젤 짱이에요 !!!!!!!!