IT리뷰

혼자 공부하는 컴퓨터구조+운영체제 2탄

jb213 2022. 9. 13. 00:16

두번째 운영체제 편을 정리하기에 앞서서 유튜브 채널도 들어가서 관련 강의도 들어봤다.

책에서 직접 컴퓨터구조를 뜯어볼 것을 권장했는데 동영상 강의로 해당 부분을 보충할 수 있다.

관련 링크

https://hongong.hanbit.co.kr/%ec%bb%b4%ed%93%a8%ed%84%b0-%ea%b5%ac%ec%a1%b0-%ec%9a%b4%ec%98%81%ec%b2%b4%ec%a0%9c/

 

[한빛미디어] 혼자 공부하는 컴퓨터 구조+운영체제

좋은 개발자는 컴퓨터를 분석의 대상으로 바라볼 뿐, 두려워하지 않는다!‘전공서가 너무 어려워서 쉽게 배우고 싶을 때’, ‘개발자가 되고 싶은데 뭐부터 봐야 하는지 모를 때’ ‘기술 면접

hongong.hanbit.co.kr

 

운영체제의 경우는 리눅스도 사용하는지라 좀 더 실제적으로 상황을 떠올리며 읽을 수 있었다.

그리고 예전에 수강했던 운영체제 수업을 기억하면서 들을 수 있었는데 실제로 참고할 내용도 많은 만큼

정리할 내용도 많았다.

 

09 운영체제 시작하기

사용자모드 : 운영체제 서비스를 제공받을 수 없는 실행모드

커널모드 : 운영체제 서비스를 제공받을 수 있는 실행 모드. 자원에 접근 가능.

 

10 프로세스와 스레드

유닉스 프로세스 직접 확인하기 : ps

 

리눅스로 필요한 작업을 할 때 daemon 작업을 해야 되는 때가 있었는데 윈도우에서 어떤 GUI로 확인할 수 있는지 매칭해볼 수 있었다.(윈도우는 작업 관리자에서 '서비스'에서 백그라운드 프로세스 확인 가능)

 

PID : 특정 프로세스를 식별하기 위해 부여하는 고유한 번호

PCB : 커널 영역에 저장. 프로세스 상태 기록(입출력장치를 사용하기 위해 기다리는 상태인지, CPU를 사용하기 위해 기다리고 있는 상태인지, CPU를 이용하고 있는 상태인지), 언제, 어떤 순서로 CPU를 할당받을지, 프로세스가 어느 주소에 저장되어 있는지(베이스 레지스터, 한계 레지스터 값 저장, 페이지 테이블 정보 저장), 특정 입출력장치나 파일을 사용한 내용 명시(어떤 입출력장치가 이 프로세스에 할당되었는지, 어떤 파일들을 열었는지 저장)

 

프로세스의 메모리 영역

코드 영역 : 텍스트 영역, 기계어로 이루어진 명령어 저장. 쓰기 금지, 읽기 전용 공간, 정적 할당 영역(크기가 변하지 않음)

데이터 영역 : 전역 변수, 정적 할당 영역(크기가 변하지 않음)

힙 영역 : 동적 할당 영역, 프로그래머가 직접 할당, 메모리누수 발생, 메모리의 낮은 주소에서 높은 주소로 할당

스택 영역 : 동적 할당 영역, 데이터 일시적으로 저장하는 공간, 잠깐 쓰다가 말 값들이 저장(매개 변수, 지역 변수) PUSH -> POP, 메모리의 높은 주소에서 낮은 주소로 할당

 

프로세스 계층 구조

부모 프로세스 -자식 프로세스

PPID                    PID

예) 사용자가 컴퓨터 켜고 로그인 창을 통해 로그인 한 뒤 bash 셸로 Vim을 실행했다.

1. 사용자가 컴퓨터를 켰을 때 최초 프로세스는 로그인을 담당하는 프로세스로 자식 프로세스를 생성

2. 로그인 프로세스는 bash 셸 프로세스를 자식 프로세스로 생성

3. bash 셸 프로세스는 vim 프로세스를 생성

 

가장 최초 프로세스

유닉스 init

리눅스 systemd

맥OS launchd

최초 프로세스 PID는 항상 1번

 

운영체제 섹터부터는 코드도 조금씩 나와서 이해하기가 좀 더 수월했다.

프로세스(PPID, PID) 부분 파이썬 코드 깃헙 예제

https://github.com/kangtegong/self-learning-cs/blob/main/process/process_python.md#python%EC%9C%BC%EB%A1%9C-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EB%8B%A4%EB%A3%A8%EA%B8%B0

 

GitHub - kangtegong/self-learning-cs: 『혼자서 공부하는 컴퓨터구조 & 운영체제』 (한빛미디어) 심화자료

『혼자서 공부하는 컴퓨터구조 & 운영체제』 (한빛미디어) 심화자료. Contribute to kangtegong/self-learning-cs development by creating an account on GitHub.

github.com

 

스레드

프로세스끼리는 자원을 공유하지 않지만 스레드끼리는 같은 프로세스 내의 자원을 공유함

때문에 여러 프로세스를 병행 실행하는 것보다 메모리에서 효율적

but 멀티프로세스 환경은 하나의 프로세스에 문제가 생겨도 다른 프로세스는 지장이 없거나 적은데

멀티스레드 환경은 하나의 스레드에 문제가 생기면 프로세스 전체에 문제가 생길 수 있음

 

프로세스 간 통신(IPC : inter process communication)

: 파일을 통한 프로세스 간 통신, 공유메모리 둘 수도 있음, 소켓, 파이프 등으로 통신 가능, 까다롭긴 함

 

11 CPU 스케줄링

윈도우 프로세스 우선순위 확인 : Process Explorer 사용해서 확인,변경 가능

https://docs.microsoft.com/ko-kr/sysinternals/downloads/process-explorer

 

Process Explorer - Windows Sysinternals

열려 있는 파일, 레지스트리 키 및 기타 개체 프로세스, 로드한 DLL 등을 알아봅니다.

docs.microsoft.com

 

선점형 스케줄링 : 더 급한 프로세스가 끼어들 수 있음. 문맥 교환 과정에서 오버헤드

비선점형 스케줄링 : 문맥 교환 오버헤드 적음. 당장 지원 사용 불가할 수 있음

 

다단계 피드백 큐 스케줄링 : 구현 복잡, 가장 일반적인 CPU 스케줄링 알고리즘임

 

12 프로세스 동기화

상호 배제를 위한 동기화 원칙 3가지

-상호 배제

-진행

-유한 대기

 

14 가상 메모리

스와핑 : 메모리에 적재된 프로세스 중 오랫동안 사용되지 않은 프로세스를 임시로 보조기억장치 일부 영역으로 내쫓고 빈 공간에 또 다른 프로세스를 적재하여 실행하는 것

스왑 영역: 스왑 아웃(메모리 -> 스왑 영역), 스왑 인(스왑 영역 -> 메모리)

외부단편화 : 프로세스를 할당하기 어려울 만큼 작은 메모리 공간들로 인해 메모리가 낭비되는 현상

-> 해결 방법 : 압축(메모리조각모음)

-> 또다른 해결방법: 가상 메모리 기법(페이징 기법)

 

페이징 기법 : 프로세스의 논리 주소 공간을 페이지라는 일정한 단위로 자르고 메모리 물리 주소 공간을 프레임 이라는 페이지와 동일한 크기의 일정한 단위로 자른 뒤 페이지를 프레임에 할당하는 가상 메모리 관리 기법. 스와핑 가능

페이지아웃, 페이지인

 

15 파일 시스템

저널링 파일 시스템 : 작업 로그를 통해 시스템 크래시가 발생했을 때 빠르게 복구하기 위한 방법

예) 마이크로소프트 NT 파일 시스템, 리눅스 ext3, ext4 파일 시스템 등이 모두 이 기능 지원

 

여기까지로 운영체제 내용도 정리해봤다.

개인적으로 이 분야를 복습해야겠다는 생각이 있어서 특정 부분을 열심히 읽었다.

저자는 리눅스 시스템을 분석해보길 권한다.

이 의견에 나도 어느정도 공감한다.

운영체제를 다뤄보기에는 리눅스가 쉽고 편리한 것 같다.

윈도우는 뭔가.. 여러 방면에서 좀 다른 것 같다.

책은 크고 두껍지만 용어집, 퀴즈, 쉬운 설명, 적절한 도식 및 그림(자세한 단계별 그림) 때문에 공부하기 쉬웠다.

앞으로도 혼공 시리즈는 종종 올려볼까 한다.