마지막챕터 : 컴퓨터
[ 소통을 원하지는 않습니다 ]
컴퓨터책 (7)
[혼공컴운] 혼공학습단 13기 활동 회고((1.01^365=?)


활동 기간: 2025.01.06 ~ 02.23(6주)
책이름: 혼자 공부하는 컴퓨터 구조 + 운영체제 
저자: 강민철
출판사: 한빛미디어
판본 표시: 초판 발행. 2022년 08월 16일

출처: 혼공게시판




입문자용 책을 위한 소소한 고찰..

 


한빛미디어에서 운영하는 "혼공학습단" 13기에 참여했습니다. 

개발자는 아니고, 컴퓨터, 네트워크, 소프트웨어를 하찮은 수준에서 관리하고 있습니다. 워라벨이라는 시소(seesaw)가 한 쪽으로 기울어진 게 아니라 완전히 주저앉은 직장입니다. 단점은 굳이 말하지 않아도 짐작할 수 있겠지만, 유일한 장점은 업무난이도가 낮고 상대적으로 여유시간이 있는 편이라는 점입니다. 

AI 등장으로 다양한 분야에서 혼자 학습할 수 있는 환경이 훨씬 풍부해졌다고 생각되지만, 초보적인 영역에서는 멘토 혹은 가이드가 꼭 필요하다고 보는 편입니다. 

평소 기본을 다지기 위해 몇 권의 컴퓨터 기초 관련 서적과 유튜브 강좌들을 보며 초심자들을 위해 씌여지는 책들이 가졌으면 하는 미덕들이 떠올랐습니다. 


1. 초보자용 서적은 "쉽게" 씌여지는 게 당연하지만, "쉽게"라는 부사는 넣지 않는 않는 것이 좋을 것 같습니다. 


배경지식이 거의 없다시피한 초심자나 비전공자에게는 전공 관련 서적이 대부분 가파른 언덕입니다. "쉽게"라는 부사가 적당한 주기로 등장하는 경우가 많은데, 읽는 사람이 쉽다고 느끼는 경우는 생각보다 많지 않습니다. 오히려 "쉽게" 쓴 걸 본인의 능력이 부족해서 이해 못하는 게 아닌가하는 자괴감에 빠지는 경우가 생각보다 꽤 있다고 보시는 게 좋을 것 같습니다. 자매품 "간단하게도" 있습니다. 
"쉽고 간단하게" 썼다는 데 그 부사의 뒷부분이 하나도 이해가지 않으면 책을 덮는 사람들이 있습니다. 
"쉽게", "간단하게"는 정말 주의해서 적확하고(=정확하게 맞아 조금도 틀리지 아니하다), 정확하게(=바르고 확실하다) 사용하면 좋겠습니다. 습관적으로 부사를 넣어서 책의 페이지수를 늘리지 말아주세요. 나무가 웁니다. 


2. 입문자 혹은 비전공자용 서적들은 용어에 해당 업계에서 사용하는 원어(주로 영어)를 같이 써주면 좋겠습니다.  


이어서 뭔가 설명이 잘 납득하지 못해서 학습자가 다시 검색, 질문해서 헤쳐나갈 때가 많은데, 책을 쓴 사람이 이해를 돕기 위해, 혹은 지은이가 더 적확한 뜻을 담고 있다고 생각하는 단어로 설명한 경우에 검색결과가 별로 좋지 않을 때가 있습니다. 이때 원어가 같이 써 있으면 도움이 된다고 생각됩니다. 

 


3. 문장을 길게 쓴다고 해서, 부사를 더 많이 넣는다고 해서, 더 쉽고 자세하게 설명할 수는 없습니다. 


이건 누구나 하는 실수 아닌 실수라고 생각됩니다. 수학자 블레즈 파스칼조차 "시간이 없어서 길게 썼네"라고 할 정도로 글을 간결하게 쓰는 건 아주 어려운 일입니다. 대개 내용이 좋지 않은 책들은 부실한 설명을 보충하려고 문장이 장황하게 길어지고, 내용이 좋은 책들은 중요하고 관련있는 내용들이 간결하고 빽빽하게 들어차는 바람에 읽는 이를 주눅들게 합니다. 
이런 부분을 모두 개선해야 좋은 초보자용 책이라고 생각되지만, 이게 쉬운 일은 아니죠. 그런 책이 발견되면 집에 신주단지 모시듯 보관할 겁니다.  

 


3. 가독성도 중요하지만, 흐름을 유지하도록 구성하는 것도 중요합니다.

 
비단 초보자용 책들 뿐 아니라 대부분의 서적에 해당되는 부분이지만, 눈이 시원시원하게 페이지가 만들어졌으면 좋겠고, 불필요하게 책의 앞뒤로 이동하지 않도록 구성하는 게 좋을 것 같습니다. 간단한 퀴즈나 복습용 퀴즈의 답을 굳이 페이지 뒤에 배치하지 말아주세요. 왔다갔다 하느라 정신만 사납습니다. 
어차피 초보자들의 약간 불성실하게(?) 책을 읽을 것 같으면 같은 내용을 약간 다른 관점이나 관련성을 중심으로 반복 설명으로 넣어주세요. 불성실하게 읽는 사람들은 책을 어디까지 읽었는지도 헷갈리고, 이 내용이 어디서 나왔는지 이전 부분도 기억 못하는 경우가 왕왕 있습니다. (경험담입니다. ^^;;) 어디서 읽어도 굳이 앞부분이나 뒷부분을 찾는 일이 별로 없도록 서술해주세요. 어쩔 수 없는 경우에는 "목차"라는 걸 활용할 수도 있습니다. 


4. 목차는 생각보다 중요합니다. 


오랜만에 책을 이어서 읽을 때도 목차가 중요하지만, 책을 다 읽은 후에도 목차를 보며 머릿속으로 복습할 때도 좋습니다. 각 챕터 요약의 문맥을 읽고 목차를 봤는데, 뭔가 이질감이 느껴질 때면 가끔.. 약간.. 불안합니다. ^^;;
 

5. 가급적 실습해 볼 수 있는 가이드나 이미지 자료, 풍부한 참고자료가 있으면 좋겠습니다. 


이번에는 지은이의 gitbub, 유튜브 영상 등 참고자료가 풍부한 편이었지만, 그래도 읽는 사람이 되도록 직접 입력해보고 해당 설명이 어느 부분에 있는지 확인하는 구성도 추가되었으면 좋겠습니다. 
윈도우, 리눅스 운영체제에서 명령어를 입력한 뒤 결과에 대한 설명이 꽤 있다고 생각됩니다. 


6. 입문서, 풍부한 추가자료 외에 다양한 SNS를 활용한 소통과 주기적인 현황 점검 페이지도 좋았습니다. 


10여권이 마다 수십개의 게시글들이 달리는데, 일일이 답글을 달리는 걸 보면서 궁금한 점은 AI를 활용했는가였습니다. AI를 활용했다고 보기에는 답글의 내용이 다채로워 보였고, AI를 안 썼다고 하기에는 양이 너무 무리라고 생각될 정도로 많다고 느꼈기 때문입니다. ^^;;


7. 혼공학습단의 책들도 서로 연관성이 있을 것 같습니다. 

 

13기에서 어떤 책을 읽었다면, 14기에서는 어떤 책을 읽으면 좋을지, 혹은 14기 참여할 때, 13기의 어떤 책이 좋았는지 공유해 보는 SNS 페이지도 있으면 좋겠습니다. 


책 잘 읽었습니다. 올해는 책을 좀 더 읽고 싶고, 느슨했던 지식들을 다시 재정비해서 주변에서 컴퓨터와 씨름하는 비전공자들(사실상 컴맹)에게 체계적인 가이드 역할을 해줄 수 있으면 좋겠다는 바램이 있습니다. 좋은 커리어가 있다면 멘토라고 하고 싶으나.. 차마.. 쿨럭.. 

 

올해 목표는 이런 거라고 말하고 나니 2월이 끝나가네요. ㅋㅋㅋ

요즘은 이런 거 안 주나요?

  Comments,     Trackbacks
[혼공컴운] 6주차_컴퓨터 구조+운영체제 14장~15장 & 책리뷰

Chapter 14 가상 메모리(Virtual Memory)

14-1 연속 메모리 할당

- 스와핑(Swapping)은 메모리에서 사용되지 않는 일부 프로세스를 보조기억장치로 내보내고 실행할 프로세스를 메모리로 들여보내는 메모리 관리 기법입니다. 

- 최초 적합(First fit) 방식은 최초로 발견한 적재 가능한 빈 공간에 프로세스를 배치하는 방식입니다. 

- 최적 적합(Best fit) 방식은 프로세스가 적재될 수 있는 가장 작은 공간에 프로세스를 배치하는 방식입니다. 

- 최악 적합(Worst fit) 방식은 프로세스가 적재될 수 있는 가장 큰 공간에 프로세스를 배치하는 방식입니다. 

- 외부 단편화(External fragmentation)는 프로세스를 할당하기 어려울 만큼 작은 메모리 공간들로 인해 메모리가 낭비되는 현상을 의미합니다. 


14-2 페이징을 통한 가상 메모리 관리

- 페이징(Paging)은 물리 주소 공간을 프레임(Frame) 단위로 자르고 프로세스의 논리 주소 공간을 페이지 단위로 자른 뒤 각 페이지를 프레임에 할당하는 가상 메모리 관리 기법입니다. 

- 페이지 테이블(Page table)을 통해 페이지가 적재된 프레임을 찾을 수 있습니다. 페이지 테이블에는 페이지 번호와 프레임 번호뿐 아니라 유효 비트(Valid bit), 보호 비트(Protection bit), 접근 비트(Reference bit), 수정 비트(Modified bit) 등이 있습니다. 

- PTBR(Page Table Base Register)은 각 프로세스의 페이지 테이블이 적재된 주소를 가리킵니다. 

- TLB(Translation Lookaside Buffer)는 페이지 테이블의 캐시 메모리 역할을 수행하기 위해 페이지 테이블의 일부를 저장합니다. 

 

 


14-3 페이지 교체와 프레임 할당

- 요구 페이징(Demand paging)은 페이지가 필요할 때에만 메모리에 적재하는 기법입니다. 

- 페이지 교체 알고리즘(Page Replacement Algorithm)은 FIFO(First-In First-Out), 최적(Optimal), LRU(Least Recently Used) 페이지 교체 알고리즘 등이 있습니다.

- 스래싱(Thrashing)이란 지나치네 비번한 페이지 교체로 인해 CPU 이용률이 낮아지는 문제를 뜻합니다. 

- 프레임 할당(Frame allocation) 방식에는 균등 할당(Equal allocation)과 비례 할당(Proportional allocation), 작업 집합(Working set)모델과 페이지 폴트율(Page fault rate) 기반 프레임 할당 방식이 있습니다.

 

 

 

 

Chapter 15 파일 시스템(File System)

15-1 파일과 디렉터리

- 파일(File)은 의미 있고 관련 있는 정보를 모은 논리적인 단위입니다. 

- 운영체제는 파일의 확장자(Extension)를 통해 파일의 유형을 파악할 수 있습니다.

- 파일의 속성(Attribute)에는 파일과 관련된 다양한 부가 정보들이 있습니다. 

- 디렉토리(Directory)를 이용하면 여러 개의 파일 또는 디렉터리를 묶어 관리할 수 있습니다. 

- 경로(Path)는 디렉터리를 이용해 위치를 특정 짓는 정보입니다. 

- 절대 경로(Absolute path)는 루트 디렉터리부터 시작하는 경로이고, 상대 경로(Relative path)는 현재 디렉터리부터 시작하는 경로입니다. 

 


15-2 파일 시스템
- 파티셔닝(Partitioning)은 하드 디스크나 SSD처럼 용량이 큰 저장 장치를 하나 이상의 논리적인 여러 단위로 구획하는 작업을 의미합니다. 

- 포매팅(Formatting)이란 파일 시스템을 설정하여 어떤 방식으로 파일을 저장하고 관리할 것인지를 결정하고, 새로운 데이터를 쓸 수 있게 하는 작업을 의미합니다. 

- 연속 할당(Contiguous allocation)은 보조기억장치 내 연속적인 블록에 파일을 할당하는 방식입니다. 

- 연결 할당(Linked allocation)은 각 블록 일부에 다음 블록의 주소를 저장하여 블록들을 연결 리스트 형태로 관리하는 방식입니다. 

- 색인 할당(Indexed allocation)은 파일의 모든 블록 주소를 색인 블록에 모아 관리하는 방식입니다. 

- FAT 파일 시스템은 FAT(File Allocation Table)를 이용하는 연결 할당 기반의 파일 시스템입니다. 

- 유닉스 파일 시스템은 i-node를 이용하는 색인 할당 기반의 파일 시스템입니다. 

 

 

** 15장 파일시스템의 15-1 파일과 디렉토리 확인문제 3번(451쪽)의 답지 설명이 이상합니다. 

3. 디렉토리와 관련한 설명으로 옳지 않은 것을 고르세요. 

디렉토리는 보조기억장치에 저장되어 있지 않습니다. 

② 디렉토리 엔트리에는 해당 디렉터리에 저장된 대상들에 대한 정보가 담깁니다. 

③ 운영체제는 디렉터리를 다루는 다양한 시스템 호출을 제공합니다. 

④ 최상위 디렉토리를 루트 디렉터리라고 합니다. 

문제에서 "옳지 않은 것"을 고르라고 했으니 1번이 맞는데, 493쪽 답지 설명에도 "디렉터리도 파일과 동일하게 보조기억장치에 저장되어 있지 않습니다"라고 씌여 있네요. 440쪽에 나와 있듯이 "파일과 디렉토리는 보조기억장에 있는 데이터 덩어리일 뿐인데,"라고 한다면 답지 설명에는 "디렉토리도 파일처럼 보조기억장치에 저장되어 있습니다."라고 설명되어 있어야 하지 않을까 싶습니다. ^^;;

 

 

 

 

[기본 숙제]

400쪽의 확인 문제 1번 풀고 인증하기.

1. 메모리 할당 방식에 대한 설명으로 올바른 것을 다음 보기에서 찾아 써 보세요. 

보기: 최초 적합, 최적 적합, 최악 적합

● (① 최초 적합): 최초로 발견한 적재 가능한 빈 공간에 프로세스를 배치하는 방식

● (② 최악 적합): 프로세스가 적재될 수 있는 가장 큰 공간에 프로세스를 배치하는 방식 

● (③ 최적 적합): 프로세스가 적재될 수 있는 가장 작은 공간에 프로세스를 배치하는 방식

 

 

 

[추가 숙제] 

Ch.14(14-3) 프로세스가 사용할 수 있는 프레임이 3개 있고, 페이지 참조열이 '2313523423' 일 때 LRU 페이지 교체 알고리즘으로 이 페이지를 참조한다면 몇 번의 페이지 폴트가 발생하는지 풀어보기

출처: 혼자 공부하는 컴퓨터 구조 + 운영체제. 한빛미디어

 

2,3,1,3,5

페이지 참조열에 5가 들어왔을 때, 프레임에는 2,3,1 이렇게 3개만 있으므로 페이지폴트가 발생하고 그 중 가장 오랫동안 사용하지 않은 2가 보조기억장치로 이동하고 그 자리에 5가 들어갑니다. - 페이지 폴트 발생.(1회)

 

** 프레임이 3개인 구성에서 가장 오랫동안 사용하지 않은 페이지가 선택되는 과정은 다음과 같습니다.

1. 프레임 3칸에 페이지가 모두 찰 때까지는 무조건 페이지 참조열 값을 입력합니다. 

2. 프레임에 빈 칸이 없고, 새로 요청받은 페이지 참조열 값이 3칸의 프레임 중에 있는 경우, 해당 프레임 값을 사용합니다.

3. 프레임에 빈 칸이 없고, 새로 요청받은 페이지 참조열 값이 프레임에 없는 경우, 3개의 프레임 중에서 가장 오래된 값을 선택해서 보조저장장치로 이동시킵니다. 

4. 프레임에 없는 5가 페이지 참조열에 들어온 경우, 5를 기준으로 왼쪽 방향으로 요청받아왔던 페이지들을 3칸(프레임 갯수)까지 되집어 보되, 중복된 페이지들은 무시합니다.

5. 가장 최근에 접근했던 순서(왼쪽 방향)대로 보자면 3, 1, 2가 되며(3이 2번 나왔을 때 더 오래된 3은 무시, 다시 말해 중복된 페이지가 보일 때는 최근 접근했던 페이지로만 카운트), 3번째 페이지인 2를 보조저장장치로 이동시키고, 그 빈 자리에 5를 채워 넣습니다. 

 

2,3,1,3,5,2

페이지 참조열에 2가 들어왔을 때, 프레임에는 5,3,1 이렇게 3개만 있으므로(2는 바로 이전 차례에 보조기억장치로 이동) 5,3,1 중 가장 오랫동안 사용하지 않은 1이 보조기억장치로 이동하고 그 자리에 다시 2가 들어갑니다. - 페이지 폴트 발생.(2회)  

 

2,3,1,3,5,2,3,4

페이지 참조열에 4가 들어왔을 때, 프레임에는 5,3,2 이렇게 3개만 있으므로 5,3,2 중 가장 오랫동안 사용하지 않은 5가 보조기억장치로 이동하고 그 자리에 다시 4가 들어갑니다. - 페이지 폴트 발생.(3회) 

 

 

지은이 강민철 github

 

https://github.com/kangtegong

 

https://minchul.net/

 

 

 

 

 

 

 

 

[책리뷰] 

 

하찮은 레벨의 IT관련 지원관리업무를 맡고 있기에 가끔 주변 사람들에게 컴퓨터 구성이나 윈도우 및 응용 프로그램의 사용법에 대해 알려줄 일이 있어서 몇 년마다 주기적으로 컴퓨터 기본 서적들을 보고 있습니다. 

 

최근에 읽은 "혼자 공부하는 컴퓨터 구조 + 운영체제"는 개발자를 지망하는 비전공자 분들을 위해 씌여진 것으로 보이는데, 너무 간소화된 것이 아닌가 싶을 정도로 쉽게 쓰려고 노력한 흔적이 많이 보입니다. 그러다 보니 약간 어려운 내용의 고전(?) 운영체제 서적을 읽었던 사람이 복습하려고 하면 혼동스러운 부분이 있어서 비교하게 되는 경향이 있습니다. 덕분에 고인물 지식이 갱신되고, 몰랐던 부분이 꽤 있었다는 걸 인정하게 되는 책으로 보입니다. 

 

설명에 필요한 삽화도 적절하고 풍부하게 배치해서 읽는 부담을 많이 줄였습니다. 다만, 쉽게 쓰기 위해 초심자들이 고민하거나 깊이있게 들여다 봐야할 부분을 잘 드러나지 않게 한 것이 아닐까 하는 기우(?)가 들기도 합니다. 

 

이 책을 읽으면서 초심자들에게 필요한 입문서가 갖추면 좋을 만한 개인적인 지침을 정리할 수 있어서 좋았습니다. 잘 읽었습니다. ^^;; 


01 ~ 03장에서는 컴퓨터 구조를 알아야 하는 이유 및 컴퓨터 구조에 대한 큰 그림, 그리고 컴퓨터를 어떻게 작동시키는지를 알아봅니다. 
Chapter 01 컴퓨터 구조 시작하기
Chapter 02 데이터
Chapter 03 명령어

 

** 사실 굉장히 당연한 내용인데, 3장이나 할애한 것이 아닌가 싶습니다. 개발자로 성장하려는 뜻을 가지고 있는 분들이라면 응용 프로그램의 개발환경이나 실행환경인 컴퓨터와 운영체제에 대한 기본지식은 충분히 갖출 필요가 있다고 봅니다. 전 폰노이만 구조 외에도 하버드 구조라는 게 있다는 걸 얼마 전에 알았습니다. ^^;;


04장 ~ 08장에서는 컴퓨터의 네 가지 핵심 부품, CPU, 메모리, 보조기억장치, 입출력장치에 대해 하나씩 살펴봅니다. 

Chapter 04 CPU와 작동 원리
Chapter 05 CPU 성능 향상 기법
Chapter 06 메모리와 캐시 메모리
Chapter 07 보조기억장치
Chapter 08 입출력장치

 

** 부품 중심의 설명이니 메인보드도 별첨(?) 정도로 같이 들어가면 좋았을 것 같습니다. 


09장 ~ 10장에서는 운영체제란 무엇인지, 프로세스와 스레드란 무엇인지, 멀티프로세스와 멀티스레드는 어떤 차이가 있는지를 이해합니다. 
Chapter 09 운영체제 시작하기
Chapter 10 프로세스와 스레드


** 흔히들 운영체제의 목표, 역할이라고 딱딱하게 씌여져 있던 부분이죠.  


11장 ~ 13장에서는 CPU 스케줄링이란 무엇이며, 동시에 프로그램(프로세스)을 실행할 때 반드시 고려해야 할 동기화와 해결해야 하는 문제인 교착 상태에 대해 다룹니다. 
Chapter 11 CPU 스케줄링
Chapter 12 프로세스 동기화
Chapter 13 교착 상태

** 스케줄링, 동기화, 교착상태 나오면 누구나 정신이 혼미해지지 않을까 싶습니다. 읽을 때는 고개를 끄덕이다가 돌아서면 설명이 잘 안되는.. 


14장 ~ 15장에서는 운영체제의 메모리 관리 기법인 가상 메모리 관리에 대해 학습하고, 파일 시스템에 대해 학습합니다. 
Chapter 14 가상 메모리
Chapter 15 파일 시스템

 

** 이제는 파일시스템에 NTFS, GPT(GUID Partition Table) 같은 것도 다룬 책이 나왔으면 좋겠습니다. 

  Comments,     Trackbacks
[혼공컴운] 5주차_컴퓨터 구조+운영체제 12장~13장

 

Chapter 12 프로세스 동기화

12-1 동기화란

- 동기화(Synchronization)는 특정 자원에 접근할 때 한 개의 프로세스만 접근하게 하거나 프로세스를 올바른 순서대로 실행하게 하는 것을 의미합니다. 

- 공유 자원(Shared resource)은 공동으로 사용하는 자원으로, 전역 변수가 될 수도 있고, 파일이 될 수도 있고, 입출력장치, 보조기억장치가 될 수도 있습니다. 

- 임계 구역(Critical section)은 공유 자원에 접근하는 코드 중 동시에 실행하면 문제가 발생하는 코드 영역을 의미합니다. 임계 구역에 진입한 프로세스가 있다면 다른 프로세스는 임계 구역 밖에서 기다려야 합니다. 

- 상호 배제(Mutual exclusion)는 한 프로세스가 임계 구역에서 작업 중이면 다른 프로세스가 임계 구역에 들어갈 수 없도록 제어하는 것입니다. 


12-2 공유 자원과 임계 구역

- 뮤텍스 락(MUTEX lock: MUTual EXclusion lock)은 임계 구역을 잠금으로써 프로세스 간의 상호 배제를 이룹니다. 

- 세마포(Semaphore)는 공유 자원이 여러 개 있는 임계 구역 문제도 해결할 수 있는 동기화 도구입니다. 

- 모니터(Monitor)는 세마포에 비해 사용자가 사용하기 편리한 동기화 도구로 조건 변수를 사용합니다. 

 

 

 


Chapter 13 교착 상태

13-1 교착 상태(Deadlock)란

- 교착 상태는 일어나지 않을 사건을 기다리며 무한히 대기하는 현상을 의미합니다. 

- 식사하는 철학자 문제(Dining philosophers problem)는 교착 상태의 발생을 보여 주는 예시입니다. 

- 자원 할당 그래프(Resource-allocation graph)를 이용해 교착 상태를 표현할 수 있습니다. 

- 교착 상태 발생 조건은 상호배제(Mutual exclusion), 점유와 대기(Hold and wait), 비선점(Nonpreemptive), 원형 대기(Circular wait)입니다. 


13-2 교착 상태 해결 방법

- 교착 상태 예방은 교착 상태의 발생 조건 중 하나를 충족하지 못하게 하는 방법입니다. 

- 교착 상태 회피는 안전 상태를 유지할 수 있는 경우에만 자원을 할당하는 방법입니다. 

- 교착 상태 검출 후 회복은 교착 상태 발생 여부를 주기적으로 검사하고, 교착 상태가 발생하면 그때그때 회복하는 방식입니다. 

 

 

 

 

[기본 숙제] 

363쪽의 확인 문제 1번 풀고 인증하기.

1. 뮤텍스 락과 세마포에 대한 설명으로 옳지 않은 것을 고르세요.

① 뮤텍스 락은 임계 구역을 잠근 뒤 임계 구역에 진입함으로써 상호 배제를 위한 동기화를 이룹니다.

② 세마포는 공유 자원이 여러 개 있는 상황에서도 이용할 수 있습니다. 

③ 세마포를 이용해 프로세스 실행 순서 제어를 위한 동기화도 이룰 수 있습니다. 

세마포를 이용하면 반드시 바쁜 대기를 해야 합니다. 

 

 

 

 

[추가 숙제]

Ch.12(12-1) 임계 구역, 상호 배제 개념을 정리하기.

 

상호 배제(Mutual Exclusion)란 여러 프로세스나 스레드가 동시에 공유 자원(Shared resource)에 접근할 수 없도록 하는 기법이고, 임계 구역(Critical Section)은 프로세스나 스레드가 공유 자원에 접근할 때 사용하는 코드의 특정 부분을 가리키며, 임계 영역에 대한 상호 배제를 보장하는 것이 중요합니다.

 

 

상호 배제를 구현하는 다양한 동기화 기법은 다음과 같습니다. 

뮤텍스(Mutex): 뮤텍스를 사용하여 서로의 접근을 제어할 수 있습니다. 하나의 스레드가 자원을 사용할 때 뮤텍스를 잠그고, 사용이 끝나면 해제하여 다른 스레드가 접근할 수 있도록 합니다.

세마포(Semaphore): 세마포는 일정 수의 스레드가 동시에 자원에 접근할 수 있도록 허용하며, 이를 통해 더 유연한 동기화가 가능합니다.

모니터(Monitor): 모니터는 객체 지향 프로그래밍에서 자원 접근을 제어하는데 유용하며, 임계 영역을 쉽게 정의하고 관리할 수 있습니다.

조건 변수(Condition Variables): 스레드가 특정 조건이 충족될 때까지 대기하도록 하고, 다른 스레드가 그 조건을 만족시키면 대기 중인 스레드가 다시 실행되도록 하는 기법입니다.

 

 

임계 영역의 효율적인 설계를 위한 주요 원칙들은 다음과 같습니다. 

상호 배제(Mutual Exclusion): 한 프로세스가 임계 구역에 진입했다면, 다른 프로세스는 임계 구역 안으로 들어올 수 없습니다. 
진행(Progress): 임계 구역에 진입한 프로세스가 없다면, 임계 구역에 들어가려는 프로세스는 임계 구역 안으로 들어갈 수 있어야 합니다.
유한 대기(Bounded Waiting): 어떤 프로세스가 임계 구역에 접근하려고 한다면, 그 프로세스는 언젠가는 임계 구역 안으로 들어올 수 있어야 합니다. 

 

 

[결론] 말이야 쉽지요. ㅋㅋㅋ

  Comments,     Trackbacks
[혼공컴운] 4주차_컴퓨터 구조+운영체제 09장~11장

Chapter 09 운영체제 시작하기

09-1 운영체제(Operating System)를 알아야 하는 이유

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

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

 

** 운영체제는 컴퓨터 구조의 각 부품이 제 성능을 발휘할 수 있도록 전반적인 관리와 자원 할당을 지원해주는 소프트웨어. 초심자에게는 컴퓨터 구조와 운영체제에 대해 같이 알아가는 게 좋은 방법이라고 생각됨.

 

09-2 운영체제의 큰 그림

- 커널(Kernel)은 운영체제의 핵심 기능을 담당합니다. 

- 이중 모드(Dual Mode)는 CPU가 명령어를 실행하는 모드를 커널 모드와 사용자 모드로 구분하는 방식입니다. 

- 시스템 호출(System Call)은 운영체제의 서비스를 제공받기 위해 커널 모드로 전환하는 방법입니다. 

- 대표적인 운영체제 서비스로 프로세스 관리, 자원 접근 및 할당, 파일 시스템 관리가 있습니다. 

 

 

 


Chapter 10 프로세스와 스레드

10-1 프로세스(Process) 개요

- 프로세스는 실행 중인 프로그램입니다. 프로세스의 종류에는 포그라운드 프로세스 (foreground process)와 백그라운드 프로세스(Background process)가 있습니다. 

- 운영체제는 프로세스 제어 블록(PCB, Process Control Block)을 통해 여러 프로세스를 관리합니다. 

- 프로세스 간에 실행을 전환하는 것을 문맥 교환(Context switching)이라고 합니다. 

- 프로세스 사용자 영역에 크게 코드 영역(Code segment), 데이터 영역(Data segment), 스택 영역(Stack segment), 힙 영역(Heap segment)으로 나뉘어 배치됩니다. 

 

** 프로세스 제어 블록(PCB)에 들어 있는 목록을 알아두면 좋을 듯 합니다.


10-2 프로세스 상태(Process State)와 계층 구조

- 프로세스 상태에는 생성, 준비, 실행, 대기, 종료가 있습니다.

- 프로세스가 다른 프로세스를 생성한 경우 프로세스를 생성한 프로세스를 부모 프로세스, 생성된 프로세스를 자식 프로세스라고 부릅니다. 

- 많은 운영체제는 프로세스가 프로세스를 낳는 프로세스 계층 구조로 프로세스들을 관리합니다.

출처: 혼자 공부하는 컴퓨터 구조 + 운영체제. 프로세스 상태 다이어그램. 한빛미디어

 

10-3 스레드(Thread)

- 스레드는 프로세스 내의 실행 흐름 단위입니다.

- 여러 프로세스를 동시에 실행하는 것을 멀티프로세스라고 하고, 여러 스레드로 프로세스를 동시에 실행하는 것을 멀티스레드라고 합니다.

 

** 스레드(Thread)는 명령어의 한 줄기, 프로그램 제어 흐름 한 가닥 정도를 나타낸다고 합니다. 

 

 

 


Chapter 11 CPU 스케줄링

11-1 CPU 스케줄링 개요(CPU scheduling)

- CPU 스케줄링은 공정하고 합리적으로 CPU 자원을 배분하는 방법을 의미합니다. 

- 프로세스는 우선순위(Priority)를 가지고 있고, 이는 PCB에 명시됩니다. 

- 운영체제는 효율적인 스케줄링을 위해 스케줄링 큐를 사용합니다. 

- 준비 큐(Ready queue)는 CPU 할당을 기다리는 프로세스들을 위한 큐를 의미합니다. 

- 대기 큐(Waiting queue)는 입출력장치를 기다리는 프로세스들을 위한 큐를 의미합니다. 

- 선점형 스케줄링(Preemptive scheduling)은 프로세스가 이용 중인 자원을 빼앗을 수 있습니다. 

- 비선점형 스케줄링(Non-preemptive scheduling)은 프로세스가 이용 중인 자원을 빼앗을 수 없습니다. 

 

11-2 CPU 스케줄링 알고리즘
- 선입 선처리 스케줄링(FCFS 스케줄링, First Come First Served Scheduling) 알고리즘은 준비 큐에 삽입된 순서대로 CPU를 할당합니다. 

- 최단 작업 우선 스케줄링(Shortest Job First Scheduling) 알고리즘은 준비 큐에 삽입된 프로세스들 중 CPU 사용 시간의 길이가 가장 짧은 프로세스부터 CPU를 할당합니다. 

- 라운드 로빈 스케줄링(Round Robin Scheduling) 알고리즘은 정해진 시간만큼만 돌아가며 CPU를 할당합니다. 

- 우선순위 스케줄링(Priority Scheduling) 알고리즘은 가장 높은 우선순위를 가진 프로세스에 CPU를 할당합니다. 

- 다단계 피드백 큐 스케줄링(Multilevel Feedback Queue Scheduling) 알고리즘은 프로세스들이 큐 사이를 이동할 수 있는 다단계 큐 스케줄링입니다. 

 

 

 

[기본 숙제] 

304쪽 확인 문제 1번 풀고 인증하기

1. 다음은 프로세스 상태를 보여주는 상태 다이어그램입니다. ①부터 ⑤까지 올바른 상태를 적어 보세요. 

출처: 혼자 공부하는 컴퓨터 구조 + 운영체제. 한빛미디어.

생성    ② 준비    ③ 실행    ④ 종료    ⑤ 대기

 

 

[추가 숙제] 

Ch.11(11-2) 준비 큐에 A,B,C,D 순으로 삽입되었다고 가정했을 때, 선입 선처리 스케줄링 알고리즘을 적용하면 어떤 프로세스 순서대로 CPU를 할당받는지 풀어보기 

 

선입 선처리 스케줄링(FCFS, First Come First Served Scheduling)의 경우, 준비 큐(Ready Queue)에 A, B, C, D 순서로 삽입되면 들어온 순서대로 A, B, C, D가 CPU를 할당받습니다.
이때 처리시간이 가장 긴 작업이 가장 먼저 들어온 경우, 그 뒤에 있는 짧은 작업들도 덩달아 대기해야 하는 호위 효과(Convoy Effect)가 발생합니다. '호위효과'란 군대나 행진에서 가장 느린 부대나 차량 때문에 마치 호위대처럼 전체 진행이 지연되는 상황을 비유적으로 뜻하는 말이라고 합니다. 

알고리즘이 단순한 것이 이점일 수 있지만, 최악의 경우에는 시스템의 전체적인 성능에 많은 악영향을 줍니다.  

  Comments,     Trackbacks
[혼공컴운] 3주차_컴퓨터 구조+운영체제 06장 ~ 08장

Chapter 06 메모리와 캐시 메모리

06-1 RAM의 특징과 종류

- RAM(Random Access Memory)은 휘발성 저장 장치(Volatile memory)이고, 보조기억장치는 비휘발성 저장 장치(Non-volatile memory)입니다. 

- DRAM(Dynamic RAM) 시간이 지나면 저장된 데이터가 점차 사라지는 RAM이고, SRAM(Static RAM)은 시간이 지나도 저장된 데이터가 사라지지 않는 RAM입니다. 

- SDRAM(Synchronous Dynamic RAM)은 클럭과 동기화된 DRAM입니다. 

- DDR SDRAM(Double Data Rate SDRAM)은 SDR SDRAM(Single Data Rate SDRAM)에 비해 대역폭이 두 배 넓습니다.

 

06-2 메모리의 주소 공간

- 물리 주소(Physical address)는 메모리 하드웨어상의 주소이고, 논리 주소(Logical address)는 CPU와 실행 중인 프로그램이 사용하는 주소입니다. 

- MMU(Memory Management Unit)은 논리 주소를 물리 주소로 변환합니다. 

- 베이스 레지스터(Base register)는 프로그램의 첫 물리 주소를 저장합니다. 

- 한계 레지스터(Limit register)는 실행 중인 프로그램의 논리 주소의 최대 크기를 저장합니다. 

 

06-3 캐시 메모리

- 저장 장치 계층 구조(Memory hierarchy)는 각기 다른 용량과 성능의 저장 장치들을 계층화하여 표현한 구조입니다. 

- 캐시 메모리(Cache memory)는 CPU의 연산 속도와 메모리 접근 속도의 차이를 줄이기 위한 저장 장치입니다. 

- 캐시 적중률(Cache hit ratio)이 높으면 CPU의 메모리 접근 횟수를 줄일 수 있습니다. 

- 캐시 메모리는 참조 지역성의 원리(Locality of reference, principle of locality)에 따라 데이터를 예측하여 캐시 적중률을 높입니다. 

 

 

 

 

Chapter 07 보조기억장치

07-1 다양한 보조기억장치(Secondary Storage)

- 하드 디스크의 구성 요소에는 플래터, 스핀들, 헤드, 디스크 암이 있습니다. 

- 플래터는 트랙과 섹터로 나뉘고, 여러 플래터의 동일한 트랙이 모여 실린더를 이룹니다. 

- 하드 디스크의 데이터 접근 시간(Data Access Time)은 크게 탐색 시간(Seek time), 회전 지연(Rotational latency), 전송 시간(Transfer time)으로 나뉩니다. 

- 플래시 메모리(Flash memory)는 한 셀에 몇 비트를 저장할 수 있느냐에 따라 SLC(Single Level Cell), MLC(Multiple Level Cell), TLC(Triple Level Cell)로 나뉩니다. 

- 플래스 메모리의 읽기와 쓰기는 페이지 단위로, 삭제는 블록 단위로 이루어집니다. 

 

07-2 RAID의 정의와 종류

- RAID(Redundant Array of Independent Disk)란 데이터의 안전성 혹은 높은 성능을 위해 여러 하드 디스크나 SSD(Solid State Drive)를 마치 하나의 장치처럼 사용하는 기술입니다. 

- RAID 0는 데이터를 단순히 병렬로 분산하여 저장하고, RAID 1은 완전한 복사본을 만듭니다. 

- RAID 4는 패리티를 저장한 장치를 따로 두는 방식이고, RAID 5는 패리티를 분산하여 저장하는 방식입니다. 

- RAID 6는 서로 다른 두 개의 패리티를 두는 방식입니다. 

 

** RAID 2와 3은 잘 안쓴다고 책에 "note"로 씌여 있습니다. 

** RAID 0, 1, 4, 5, 6 레벨은 이 책에 그림으로 이해하기 쉽게 잘 설명되어 있습니다. 

 

 

 


Chapter 08 입출력장치

08-1 장치 컨트롤러와 장치 드라이버

- 입출력장치는 장치 컨트롤러(Device controller)를 통해 내부와 정보를 주고 받습니다. 

- 장치 드라이버(Device driver)는 장치 컨트롤러가 컴퓨터 내부와 정보를 주고 받을 수 있게 하는 프로그램입니다. 


08-2 다양한 입출력 방법
- 프로그램 입출력(Programmed I/O)은 프로그램 속 명령어로 입출력 작업을 하는 방식입니다. 

- 메모리 맵 입출력(Memory-mapped I/O)는 메모리에 접근하기 위한 주소 공간과 입출력 장치에 접근하기 위한 주소 공간을 하나의 주고 공간으로 간주하는 입출력 방식입니다. 

- 고립형 입출력(Isolated I/O)은 메모리에 접근하기 위한 주소 공간과 입출력장치에 접근하기 위한 주소 공간을 별도로 분리하는 입출력 방식입니다. 

- 인터럽트 기반 입출력은 인터럽트로써 입출력을 수행하는 방법입니다. 

- DMA 입출력은 CPU를 거치지 않고 메모리와 입출력장치 간의 데이터를 주고 받는 입출력 방식입니다. 

- 입출력 버스는 입출력장치와 컴퓨터 내부를 연결 짓는 통로로, 입출력 작업 과정에서 시스템 버스 사용 횟수를 줄여줍니다. 

 

 

 

[기본 숙제]

185쪽 확인 문제 3번.

3. 다음 설명을 읽고 무엇에 대한 SDRAM에 대한 설명인지 DRAM에 대한 설명인지 쓰세요.

보기: SDRAM, DRAM

● 주로 캐시 메모리로 활용됩니다. ① SRAM

● 주로 주기억장치로 활용되니다. ② DRAM

● 대용량화하기 유리합니다. ③ DRAM

● 집적도가 상대적으로 낮습니다. ④ SRAM

 

** 오타로 추측되는 곳. 

"무엇에 대한 SDRAM에 대한 설명인지" -> "무엇이 SRAM에 대한 설명인지"

"보기: SDRAM, DRAM" -> "보기: SRAM, DRAM"

SDRAM(Synchronous Dynamic RAM)이어서 SRAM과 관련 없다고 책에도 써 있고, 답지에도 SRAM, DRAM으로 씌여 있음.

 

205쪽 확인 문제 1번.

1. 다음 보기에 있는 저장 장치들로 저장 장치 계층 구조 도식도를 채우세요.

출처: 혼자 공부하는 컴퓨터 구조 + 운영체제. 한빛미디어

 

레지스터   ② 캐시 메모리   ③ 메모리   ④ 보조저장장치  

 

** 예시는 보조기억장치, 답지는 보조저장장치. 현재 보고 있는 책은 2022년 8월 16일 초판 발행본인데, 최근 나온 책들은 많이 수정됐을 것 같다. 

 

 

 

[추가 숙제] 

Ch.07(07-2) RAID의 정의와 종류를 간단히 정리해 보기

 

RAID(Redundant Array of Independent Disks)는 여러 저장 장치를 결합하여 데이터 복원력 및 성능을 향상시키기 위해 사용하는 데이터 저장 기술입니다. RAID를 통해 데이터의 중복성을 제공하고, 여러 디스크에 데이터를 분산 저장함으로써 성능을 개선할 수 있습니다. RAID는 주로 서버와 스토리지 시스템에서 사용됩니다.


 1. RAID 0 (스트라이핑)
- 구조: 데이터를 여러 디스크에 분산 저장
- 주요 용도: 속도가 중요한 상황에서 적합

 2. RAID 1 (미러링)
- 구조: 동일한 데이터를 두 개의 디스크에 저장
- 주요 용도: 데이터 안전성이 중요한 시스템에서 사용

 3. RAID 2
- 구조: 비트 단위로 스트라이핑하고, 에러 검출 및 수정용 ECC(오류 수정 코드)를 사용
- 주요 용도: 현대에는 거의 사용되지 않음

 4. RAID 3
- 구조: 바이트 단위로 스트라이핑하고, 전용 패리티 디스크에 저장
- 주요 용도: 대규모 데이터 전송 및 스트리밍에서 사용

 5. RAID 4
- 구조: 블록 단위로 스트라이핑하고, 전용 패리티 디스크에 저장
- 주요 용도: 이전 RAID 방법과 유사하나, 성능상 단점이 있음

 6. RAID 5
- 구조: 블록 단위로 스트라이핑하고, 패리티 정보를 여러 디스크에 분산 저장
- 주요 용도: 중간 정도의 성능과 높은 데이터 보호를 원하는 경우

 7. RAID 6
- 구조: RAID 5와 유사하지만, 두 개의 패리티 블록을 사용
- 주요 용도: 높은 신뢰성이 요구되는 시스템

 8. RAID 10 (1+0)
- 구조: RAID 1과 RAID 0의 결합 (미러링과 스트라이핑)
- 주요 용도: 높은 성능과 데이터 안전성을 모두 요구하는 환경

 

이외에도 여러 RAID 레벨들이 공식, 비공식적으로 존재한다고 합니다. 

 

** 못 보던 용어들을 접할 수 있어서 재미있었습니다. 책을 읽다가 시간 지역성(Temporal locality)과 공간 지역성(Spatial locality)에 대해 조사하면서 이해도를 높일 수 있어서 좋았습니다. 메인보드 부품들의 역할이 많아진 듯 한데, 시간될 때 한 번 봐둬야 할 것 같네요. 

  Comments,     Trackbacks
[혼공컴운] 2주차_컴퓨터 구조+운영체제 04장 ~ 05장

Chapter 04 CPU와 작동 원리

04-1 ALU(Arithmetic Logic Unit)와 제어장치(Control Unit)

- ALU는 레지스터로부터 피연산자를 받아들이고, 제어장치로부터 제어 신호를 받아들입니다.

- ALU는 연산 결과와 플래그를 내보냅니다. 

- 제어장치는 클럭, 현재 수행할 명령어, 플래그, 제어 신호를 받아들입니다.

- 제어장치는 CPU 내부와 외부로 제어 신호를 내보냅니다.

 

출처: 혼자 공부하는 컴퓨터구조 + 운영체제. 한빛미디어

 

** 4장 ALU와 제어장치(105쪽)에서 "CPU가 메모리에 접근하는 속도는 레지스터에 접근하는 속도보다 훨씬 느립니다. ALU가 연산할 때마다 결과를 메모리에 저장한다면 당연하게도 CPU는 메모리에 자주 접근하게 되고, 이는 CPU가 프로그램 실행 속도를 늦출 수 있습니다. 그래서 ALU의 결괏값을 메모리가 아닌 레지스터에 우선 저장하는 겁니다."라는 부분이 있는데, 이는 마치 ALU가 결괏값을 속도 때문에 레지스터에 저장하는 말처럼 들리지만, 개인적으로는 ALU가 RAM과 직접 데이터나 신호를 주고 받을 수 없어서 레지스터에 저장하는 게 적절한 설명이 아닐까 싶습니다.
ALU는 CPU의 제어장치(CU, Control Unit)과 데이터 버스를 통해서 램(RAM)과 데이터 전송을 진행한다고 합니다. 물론, 레지스터에 결괏값을 저장하는 게, 제어장치와 데이터 버스를 통해 램에 저장하는 것보다 속도가 빠른 건 맞다고 생각합니다.  

참고로, 초기 컴퓨터 아키텍처가 발전할 때, 레지스터가 RAM 메모리보다 먼저 포함됐었다는 얘기가 있습니다. 

 

** 플래그 레지스터(Flag register)에 저장되는 플래그에 대한 설명도 컴퓨터의 구조를 이해하는 데 도움이 될만할 것 같은데, 요약 부분에는 없어서 참고로 기록해 둡니다. 

- 부호 플래그: 연산한 결과의 부호를 나타낸다. 

- 제로 플래그: 연산 결과가 0인지 여부를 나타낸다. (0으로 나눌 수 없는 오류를 방지하기 위한 조치가 아닌가 추측됩니다.)

- 캐리 플래그: 연산 결과 올림수나 빌림수가 발생했는지를 나타낸다. 

- 오버플로우 플래그: 연산 결과가 연산 결과를 담을 레지스터보다 큰 상황을 오버플로우(Overflow)라고 하는데, 이 오버플로우가 발생했는지 나타낸다고 합니다. 

- 인터럽트 플래그: 인터럽트가 가능한지를 0과 1로 나타내며, 1인 경우에는 인터럽트가 가능하고, 0인 경우에는 인터럽트가 불가능하다고 합니다. 하드웨어 인터럽트가 가능할 때와 불가능할 때(요청 무시)가 이 플래그를 통해 판단되는 것 같습니다. 

- 슈퍼바이저 플래그: 커널 모드(Kernel mode)와 사용자 모드(User mode) 중 어떤 모드로 실행 중인지 나타낸다고 합니다.  

 

** 이 책을 읽어 보니 ALU가 산술 논리 연산을 하는 중요한 장치이긴 하지만, 컴퓨터나 CPU의 동작을 이해할 때는 제어장치가 어떤 역할을 하는지 이해하는 게 초심자에게는 꽤 중요할 거라는 생각이 듭니다. 예전에 읽었던 책에서 제어장치를 간단하게 다룬 건지 아니면 읽어봐도 무슨 소리인지 몰라서 그냥 대충 넘어간 건지는 기억나지 않습니다. ㅋㅋㅋ 
제어장치(Control Unit)이 데이터 주고 받는 장치와 순서(순차)를 떠올려 보면 이 챕터를 이해하는 데 좋을 것 같습니다. 

그래서 111쪽 3번 문제도 참고로 기록해 봅니다. 정답은 책 뒷부분에..

출처: 혼자 공부하는 컴퓨터 구조 + 운영체제. 한빛미디어.

 

 

04-2 레지스터(Register)

- 프로그램 카운터(PC, Program Counter)는 메모리에서 가져올 명령어의 주소, 명령어 레지스터는 해석할 명령어를 저장합니다. 

- 메모리 주소 레지스터(MAR, Memory Address Register)는 메모리의 주소, 메모리 버퍼 레지스터는 메모리와 주고 받을 데이터를 저장합니다. 

- 범용 레지스터(GR, General Purpose Register)는 데이터와 주소를 모두 저장하고, 플래그 레지스터는 연산 결과 혹은 CPU 상태에 대한 부가 정보를 저장합니다. 

- 스택 포인터(SP, Stack Pointer)는 스택 최상단의 위치를 저장합니다.

- 베이스 레지스터(BR, Base Register)에 저장된 주소는 기준 주소로서의 역할을 합니다.  

 

04-3 명령어 사이클과 인터럽트

- 명령어 사이클은 하나의 명령어가 처리되는 주기로, 인출(Fetch), 실행(Execute), 간접 인터럽트 사이클(Indirect Cycle)로 구성되어 있습니다. 

- 인터럽트는 CPU의 정상적인 작업을 방해하는 신호입니다. 

- 인터럽트의 종류에는 예외(Exception)와 하드웨어 인터럽트(Hardware interrupt)가 있습니다. 

- 인터럽트 서비스 루틴은 인터럽트를 처리하기 위한 동작들로 이루어진 프로그램입니다. 

 

** 명령어 사이클은 인출(Fetch), 해석(Decode), 실행(Execute) 순서로 진행되는 것 같고, 작업에 따라 메모리 접근(Memory Access)이나 결괏값을 저장하는 과정이 들어갈 수도 있는 것 같으나, 갈수록 사이클을 단순화하는 방향으로 나아가고 있다고 하는 것 같습니다. 

 

** 동기 인터럽트(Synchronous interrupt)를 프로그램이 발생시키는 소프트웨어 인터럽트(Software interrupt)로, 비동기 인터럽트(Asynchronous interrupt)를 하드웨어 인터럽트(Hardware interrupt)로 보는 의견도 있는 것 같습니다. 이 책에서는 "동기 인터럽트"라는 용어 대신 "예외"라는 용어로 사용한다고 하네요. 옛날 기억과 조금 다른 것 같아 찾아보니 예외는 동기 인터럽트의 하위 집합(?)으로 보는 게 일반적인 것 같은데, 초심자 분들을 위한 서적임을 감안해서 대체한 것 같습니다.

 

 

 


Chapter 05 CPU 성능 향상 기법

05-1 빠른 CPU를 위한 설계 기법
- 클럭 속도가 높은 CPU는 빠르게 작동합니다. 

- 코어란 CPU 내에서 명령어를 실행하는 부품입니다. 

- 멀티코어 프로세서란 여러 개의 코어를 포함하는 CPU를 말합니다. 

- 스레드에는 하드웨어적 스레드와 소프트웨어적 스레드가 있습니다. 

- 멀티스레드 프로세서란 하나의 코어로 여러 개의 명령어를 동시에 실행할 수 있는 CPU를 말합니다. 


05-2 명령어 병렬 처리 기법 
- 명령어 파이프라이닝은 동시에 여러 개의 명령어를 겹쳐 실행하는 기법입니다. 

- 슈퍼스칼라는 여러 개의 명령어 파이프라인을 두는 기법입니다. 

- 비순차적 명령어 처리 기법은 파이프라인의 중단을 방지하기 위해 명령어를 순차적으로 처리하지 않는 기법입니다. 


05-3 CISC(Complex Instruction Set Computer)와 RISC(Reduced Instruction Set Computer)
- ISA(Instruction Set Architecture)는 CPU의 언어이자 하드웨어가 소프트웨어를 어떻게 이해할지에 대한 약속입니다. 

- CISC는 복잡하고 다양한 종류의 가변 길이 명령어 집합을 활용합니다. 

- RISC는 단순하고 적은 종류의 고정 길이 명령어 집합을 활용합니다. 

 

 

 

 

[기본 숙제] 

 

125쪽 2번 문제.

2. 설명에 맞는 레지스터를 보기에서 찾아 빈칸()을 채워 보세요.

보기: 프로그램 카운터, 명령어 레지스터, 플래그 레지스터, 범용 레지스터

- ① (플래그 레지스터): 연산 결과 혹은 CPU 상태에 대한 부가 정보를 저장하는 레지스터

- ② (프로그램 카운터): 메모리에서 가져올 명령어의 주소를 저장하는 레지스터

- ③ (범용 레지스터): 데이터와 주소를 모두 저장할 수 있는 레지스터

- ④ (명령어 레지스터): 해석할 명령어를 저장하는 레지스터

 

155쪽 4번 문제.

4. 다음 그림은 멀티코어 CPU를 간략하게 도식화한 그림입니다. 빈칸에 알맞은 용어를 써 넣으세요.

-> 코어(Core)

출처: 혼자 공부하는 컴퓨터 구조 + 운영체제. 한빛미디어.

 

 

[추가 숙제]

Ch.05(05-1). 코어(Core)와 스레드(Thread), 멀티 코어(Multi Core)와 멀티 스레드(Multi Thread)의 개념을 정리하기

 

코어(Core): 프로세서(Processor) 안에서 독립적이고 물리적인 처리 유닛.(하드웨어 안의 부품) 

코어가 여러 개 있는 프로세서는 멀티 코어 프로세서.

 

스레드(Thread): 프로세스(Process) 실행하는 가장 작은 실행 경로로, 코드의 실행 경로라고 합니다. 각 스레드는 프로세스 안에서 메모리를 서로 공유할 수 있습니다. 

스레드를 동시에 여러 개 운용 할 수 있으면 멀티 스레드(Multi thread)

 

코어도 프로세서 안에서 메모리 영역을 공유할 수 있지만 여러 과정이 필요하고(통신일 듯), 스레드는 별도의 과정 없이 직접적으로 공유된 메모리를 다룰 수 있습니다. 요즘 보통의 컴퓨터 구성은 당연히 멀티 스레드, 멀티 코어 구조이고, 이 둘은 성능 향상과 효율적인 작업 처리를 목표로 하는 기술입니다.

 

 

 

** 컴퓨터 구조를 이해할 때 필수인 CPU에 대해 다루는 4장과 5장을 읽었는데, 옛날 어렴풋한 기억과 책 내용을 맞춰 보고, 갱신(?)했습니다. 같은 주제의 책도 몇 개 정도 다른 시기에 읽어보는 게 좋은 이유는 머리 속에 남아있는 내용이 제대로 된 건지 살펴보며 다시 짜맞출 수 있기 때문입니다. 

클럭(Clock) 신호의 역할을 컴퓨터 부품들을 타이밍에 맞춰 일사불란하게 움직여 속도를 높이거나 줄이는 역할이라고 했는데, 타이밍을 맞추는 이유가 속도를 높이는 이유보다 중요한 것 같습니다. 

 

** 최신 데스크톱 PC용 인텔 CPU에서는 하이퍼쓰레딩을 넣지 않는 추세라고 하네요. 

 

하이퍼쓰레딩이란
하이퍼쓰레딩(동시 멀티쓰레딩이라고도 함)은 매우 간단한 개념이다. 각 프로세서 코어는 하나의 명령어 쓰레드를 실행하도록 설계되었지만, 하이퍼쓰레딩은 단일 프로세서 코어 내부에 두 번째 ‘가상’ 프로세서를 생성한다. 하이퍼쓰레딩을 사용하면 개별 프로세서 코어가 항상 두 개의 코어 중 하나 이상에서 명령을 실행해 항상 작동 상태를 유지한다. CPU 코어가 유용한 작업을 수행할 수 있을 때 유휴 상태로 방치되는 것은 마니아들이 원치 않는 일이다.

문제는 두 번째 코어가 ‘진정한’ 두 번째 물리적 코어가 아닌 가상 코어라는 점이다. 이로 인해 리소스 경합과 추가 오버헤드가 발생할 수 있으며, 게임 중 하이퍼쓰레딩을 켜둘지 말지에 대한 문제는 수년 동안 논쟁의 대상이 되어 왔다.  

...

홀록은 “사실 몇 가지가 복합적으로 작용한 결과”라고 말했다. 첫째, 하이퍼쓰레딩을 제품에 포함하지 않음으로써 실제로 전력 소비를 절약할 수 있다는 것을 알았고, 하이퍼쓰레딩을 포함하지 않아도 멀티코어 성능에서 약 15%, 20% 정도 앞서고 있다는 것을 알 수 있다. 따라서 효율성을 높이면서도 전체 컴퓨팅 성능에서 목표를 달성할 수 있었다는 의견이다.
...
출처: 하이퍼쓰레딩 없는 인텔 애로우 레이크, 전력 효율 극대화와 성능 향상 달성할까. - By mark_hachman. ITWORLD. 

 

  Comments,     Trackbacks
[혼공컴운] 1주차_컴퓨터 구조+운영체제 01장 ~ 03장

[책을 읽게 된 이유] 

컴퓨터 운영체제에 대한 복습과 쉬운 설명이 들어있는 안내서를 찾기 위해 "혼자 공부하는 컴퓨터 구조와 운영체제"를 읽게 되었습니다. 현재 01장 ~ 03장을 읽었는데, 아직은 전체 내용에 비해서는 미리보기 정도의 내용인 것 같습니다. 

 

 

 

Chapter 01 컴퓨터 구조 시작하기

 

01-1 구조를 알아야 하는 이유

- 컴퓨터 구조를 이해하면 문제 해결 능력이 향상됩니다.

- 컴퓨터 구조를 이해하면 문법만으로는 알기 어려운 성능/용량/비용을 고려하며 개발할 수 있습니다. 

 

[개인적인 생각] 컴퓨터 운영체제의 목적 중 하나가 응용 프로그램을 컴퓨터 하드웨어와 상호 작용할 수 있게 해주는 것이므로 개발환경이 되는 컴퓨터 구조와 운영체제에 대한 전반적인 이해가 없다면 상호 작용에서 발생할 수 있는 오류나 문제점 등에 대해 적절하게 대응하기 어려운 게 당연하다고 생각됩니다. 

 

01-2 컴퓨터 구조의 큰 그림

- 컴퓨터가 이해하는 정보에는 데이터(Data)와 명령어(Instruction)가 있습니다.

- 메모리(Memory)는 현재 실행되는 프로그램의 명령어와 데이터를 저장하는 부품입니다. 

- CPU는 메모리에 저장된 명령어를 읽어 들이고, 해석하고, 실행하는 부품입니다. 

- 보조기억장치(Secondary storage)는 전원이 꺼져도 보관할 프로그램을 저장하는 부품입니다. 

- 입출력장치(Input/Output device)는 컴퓨터 외부에 연결되어 컴퓨터 내부와 정보를 교환할 수 있는 부품입니다. 

- 시스템 버스(System bus)는 컴퓨터의 네 가지 핵심 부품들이 서로 정보를 주고받는 통로입니다. 

 

출처: 혼자 공부하는 컴퓨터 구조 + 운영체제. 한빛미디어.

 

Chapter 02 데이터

 

02-1 0과 1로 숫자를 표현하는 방법

[참고] "정보 단위"란 컴퓨터에서 정보를 처리하고 저장하는 데 사용되는 기본적인 데이터의 크기 또는 형식을 의미합니다. 일반적으로 정보 단위는 다음과 같은 여러 가지 형태로 나뉘어질 수 있습니다. 정보 단위는 데이터 저장, 전송, 처리와 같은 다양한 컴퓨터의 기능에서 중요한 역할을 하며, 효율적인 데이터 관리를 위해 이해하는 것이 중요합니다.

- 비트는 0과 1로 표현할 수 있는 가장 작은 정보 단위입니다.

- 바이트, 킬로바이트, 메가바이트, 기가바이트, 테라바이트는 비트보다 더 큰 정보 단위입니다.

- 이진법은 1을 넘어가는 시점에 자리 올림을 하여 0과 1만으로 수를 표현하는 방법입니다. 

- 이진법에서 음수는 2의 보수로 표현할 수 있습니다. 

- 십육진법은 15를 넘어가는 시점에 자리 올림하여 수를 표현하는 방법입니다. 

 

** kB, MB, GB, TB와 KiB, MiB, GiB, TiB는 서로 다른 표현이고, 후자는 키비바이트, 메비바이트, 기비바이트, 테비바이트라고 읽는다고 합니다. 새롭게 알게 된 내용.. 


02-2 0과 1로 문자를 표현하는 방법
- 문자 집합은 컴퓨터가 인식할 수 있는 문자의 모음으로, 문자 집합에 속한 문자를 인코딩하여 0과 1로 표현할 수 있습니다. 

- 아스키 문자 집합에 0부터 127까지의 수가 할당되어 아스키 코드로 인코딩됩니다. 

- EUC-KR은 한글을 2바이트 크기로 인코딩할 수 있는 완성형 인코딩 방식입니다. 

- 유니코드는 여러 나라의 문자들을 광범위하게 표현할 수 있는 통일된 문자 집합이며, UTF-8, UTF-16, UTF-32는 유니코드 문자의 인코딩 방식입니다. 

 



Chapter 03 명령어

03-1 소스 코드와 명령어
- 고급 언어는 사람이 이해하고 작성하기 쉽게 만들어진 언어입니다. 

- 저급 언어는 컴퓨터가 직접 이해하고 실행할 수 있는 언어입니다.

- 저급 언어는 0과 1로 이루어진 명령어로 구성된 기계어와 기계어를 사람이 읽기 편한 형태로 번역한 어셈블리어가 있습니다. 

- 컴파일 언어는 컴파일러에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 언어입니다. 

- 인터프리터 언어는 인터프리터에 의해 소스 코드가 한 줄씩 저급 언어로 변환되어 실행는 언어입니다. 


03-2 명령어의 구조
- 명령어는 연산 코드(Operation code)와 오퍼랜드(Operand)로 구성됩니다. 

- 연산 코드는 명령어가 수행할 연산을 의미합니다. 

- 오퍼랜드는 연산에 사용할 데이터 또는 연산에 사용할 데이터가 저장된 위치를 의미합니다. 

- 주소 지정 방식은 연산에 사용할 데이터 위치를 찾는 방법입니다. 

 

[참고] 명령어(Instruction)는 CPU의 명령어 레지스터(IR, Instruction Register) 안에 저장된다고 합니다.

주소 지정 방식(Addressing mode)

- 즉시 주소 지정 방식(Immdiate addressing mode): 연산 코드에서 사용할 데이터(상수값 같은..)를 오퍼랜드 필드에 직접 명시해서 사용.

- 직접 주소 지정 방식(Direct addressing mode): 오퍼랜드 필드에 사용할 데이터의 메모리 유효주소를 명시해서 사용.

- 간접 주소 지정 방식(Indirect addressing mode): 오퍼랜드 필드에서 사용할 데이터의 메모리 유효주소에 대한 주소를 명시해서 사용.

- 레지스터 주소 지정 방식(Register addressing mode): 오퍼랜드 필드에 연산에 사용될 데이터가 들어 있는 레지스터를 명시해서 사용.

- 레지스터  간접 주소 지정 방식(Register indirect addressing mode): 연산에 사용될 데이터를 메모리에 저장하고, 그 메모리의 유효주소를 저장한 레지스터를 오퍼랜드 필드에 명시해서 사용. 

 

** 5개의 주소 지정 방식은 각기 장단점이 있는데(속도, 유효주소의 크기 등), 그건 책 사서 읽으시면 좋을 것 같습니다. 헷갈리는 부분이 있어서 그 부분만 써봤습니다. 

 

 

[기본숙제]

 

51쪽 확인 문제 3번.

다음 설명의 빈칸에 들어갈 알맞은 내용을 써 보세요.

프로그램이 실행되려면 반드시 (메모리)에 저장되어 있어야 합니다.

 

65쪽 확인 문제 3번.

1101(2) 의 음수를 2의 보수 표현법으로 구해 보세요. 

1 1 0 1

↓ 모든 0과 1 뒤집기

0 0 1 0

1 더하기

0 0 1 1

 

1101(2)을 표현한 값은 0011(2)입니다.

 

 

 

 

[추가 숙제]

 

100쪽의 스택과 큐 개념 정리해 보기.

 

스택(Stack)과 큐(Queue)는 자료 구조(Data Structure)의 두 가지 중요한 형태.

스택 (Stack)

스택은 "후입선출(Last In, First Out, LIFO, '리포'라고 읽는다고 합니다.)" 방식으로 작동하는 데이터 구조. 즉, 가장 나중에 추가된 데이터를 가장 먼저 삭제.
 - 푸시(push): 스택에 요소를 추가합니다.
 - 팝(pop): 스택에서 가장 최근에 추가된 요소를 제거하고 반환합니다.
 - 피크(peek): 스택의 가장 위에 있는 요소를 반환하되, 제거하지 않습니다.

큐 (Queue)

큐는 "선입선출(First In, First Out, FIFO, '피포'라고 읽는다고 합니다.)" 방식으로 작동하는 데이터 구조. 즉, 가장 먼저 추가된 데이터를 가장 먼저 삭제.

 - 인큐(enqueue): 큐에 요소를 추가합니다.
 - 디큐(dequeue): 큐에서 가장 먼저 추가된 요소를 제거하고 반환합니다.
 - 프론트(front): 큐의 가장 앞에 있는 요소를 반환하되, 제거하지 않습니다.

  Comments,     Trackbacks