# data[].attributes.body
마지막까지 제출했씁니다!!!!!!!!! 회고까지 슈루룩 가보겠습니다

# data[].attributes.attachment_link.title
Notion – The all-in-one workspace for your notes, tasks, wikis, and databases.

# data[].attributes.attachment_link.description
A new tool that blends your everyday work apps into one. It’s the all-in-one workspace for you and your team

# data[].attributes.body
회고록 작성했습니다 ❤️

6주차까지 공부하고 회고록도 작성하니 너무 행복하네요 ㅎㅎㅎ

# data[].attributes.attachment_link.title
[혼공학습단 12기][혼공네트] 6주 차_ 혼.. : 네이버블로그

# data[].attributes.body
이번 혼공은 지각을 습관처럼 ㅠㅠ 하지만, 어떻게든 완주는 하고 싶은 마음에 이렇게 제출해봅니다!

# data[].attributes.attachment_link.readable_text
드디어 딥러닝으로 들어간다~!!! 고! 고!

인공 신경망 (Neural Network)

- 텐서플로(Tensorflow), 케라스(Keras)

- 이진 분류: binary_crossentropy, 다중 분류: categorical_crossentropy

- Dense → Sequential → compile → fit → evaluate

심층신경망

- model.summary()

- keras.layers.Flatten()

- relu

- optimizer

. 기본 경사 하강법 옵티마이저: SGD, Momentum, nesterov

. 적응적 학습률 옵티마이저: RMSprop, Adam, Adagrad

신경망 모델 훈련

- loss function

- epochs

- drop-out

- early stopping

기본 숙제 : Ch.07(07-1) 확인 문제 풀고, 풀이 과정 정리하기
1. 어떤 인공 신경망의 입력 특성이 100개이고 밀집층에 있는 뉴런 개수가 10개일 때 필요한 모델 파라미터의 개수는 몇 개인가요?
③ 1,010 개

→ 풀이

'wx + b'와 같기 때문에 뉴런의 개수가 10개이고 입력값이 100개라면 다음과 같이 계산할 수 있다.

10 * 100 + 10 = 1010
2. 케라스의 Dense 클래스를 사용해 신경망의 출력층을 만들려고 합니다. 이 신경망이 이진 분류 모델이라면 activation 매개변수에 어떤 활성화 함수를 지정해야 하나요?
② sigmoid

→ 풀이

이진 분류 모델이라면 0과 1로 수렴하는 형태가 유리하므로 sigmoid를 사용하는 것이 적합하다.
3. 케라스 모델에서 손실 함수와 측정 지표 등을 지정하는 메서드는 무엇인가요?
④ compile()

→ 풀이

간단한 형태의 코드 샘플을 통해 알아볼 수 있다.

dense = keras.layers.Dense(10, activation='softmax', input_shape=(784,))
model = keras.Sequential(dense)
model.compile(loss='sparse_categorical_crossentropy', metrics='accuracy')
model.fit(train_scaled, train_target, epochs=5)
model.evaluate(val_scaled, val_target)

4. 정수 레이블을 타깃으로 가지는 다중 분류 문제일 때 케라스 모델의 compile() 메서드에 지정할 손실 함수로 적절한 것은 무엇인가요?
① sparse_categorical_crossentropy

→ 풀이

One-Hot 방식인 경우 'categorical_crossentropy'를 사용하면 되고,

정수 레이블이라면 'sparse_categorical_crossentropy'를 사용하면 된다.

추가 숙제 : Ch.07(07-2) 확인 문제 풀고, 풀이 과정 정리하기
1. 다음 중 모델의 add() 메서드 사용법이 올바른 것은 어떤 것인가요?
② model.add(keras.layers.Dense(10, activation='relu'))

→ 풀이

보통 다음과 같은 형태로 작성하는 것을 권장하지만, 1-라인으로 작성한다면 ②번 형태로 작성하면 된다.
2. 크기가 300x300인 입력을 케라스 층으로 펼치려고 합니다. 다음 중 어떤 층을 사용해야 하나요?
② Flatten

→ 풀이

2차원 입력이 들어오면 1차원으로 변경하는 layer를 배치하면 된다.

keras.layers.Flatten(input_shape=(300, 300))
3. 다음 중에서 이미지 분류를 위한 심층 신경망에 널리 사용되는 케라스의 활성화 함수는 무엇인가요?
ⓑ relu

→ 풀이

relu 함수의 경우 "max(0, z)" 함수와 같은 형태로써 이미지 분류에서 유용하다.
4. 다음 중 적응적 학습률을 사용하지 않는 옵티마이저는 무엇인가요?
① SGD

→ 풀이

SGD(Stochestic Gradient Descent)는 기본 경사 하강법 옵티마이저의 가장 대표적인 위치에 있다.

# data[].attributes.attachment_link.title
[혼공머신] 6주차 - CH.07 딥러닝을 시작합니다

# data[].attributes.attachment_link.description
드디어 딥러닝으로 들어간다~!!! 고! 고! 인공 신경망 (Neural Network)- 텐서플로(Tensorflow), 케라스(Keras)- 이진 분류: binary_crossentropy, 다중 분류: categorical_crossentropy- Dense → Sequential → compile → fit → evaluate 심층신경망- model.summary()- keras.layers.Flatten()- relu- optimizer . 기본 경사 하강법 옵티마이저: SGD, Momentum, nesterov . 적응적 학습률 옵티마이저: RMSprop, Adam, Adagrad 신경망 모델 훈련- loss function- epochs- drop-out- early stopping ..

# data[].attributes.body
https://ff-tb02.tistory.com/99

대지각 죄송합니다 🥹

# data[].attributes.attachment_link.readable_text
[ 연속 메모리 할당 ]

프로세스에 연속적인 메모리 공간을 할당하는 방식
외부 단편화 문제
프로세스가 실행되고 종료되길 반복하며 메모리 사이에 빈 공간이 생김. 분명 빈 공간이지만 그 공간보다 큰 프로세스가 들어오면 적재하기 어려움 => 메모리 낭비
외부 단편화 문제 해결 방안 - 압축
흩어져 있는 빈 공간들을 하나로 모으는 방식

메모리 내에 저장된 프로세스를 적당히 재배치시켜 여기저기 흩어져 있는 작은 빈 공간들을 하나의 큰 빈 공간으로 만드는 방법
단점
압축하는 동안 하던 프로세스를 중지해야 함.

메모리에 있는 내용을 옮기는 작업은 많은 오버헤드를 야기

어떤 프로세스를 어떻게 움직여야 오버헤드를 최소화하며 압축할 수 있는지에 대한 명확한 방법을 결정하기 어려움.

[ 스와핑 ]

현재 실행되지 않는 프로세스들을 임시로 보조기억장치로 보내고, 생긴 메모리상의 빈 공간에 또 다른 프로세스를 적재하여 실행하는 방식

프로세스들이 쫓겨나는 보조기억장치의 일부 영역 = 스왑 영역

현재 실행되지 않는 프로세스가 메모리에서 스왑 영역으로 옮겨지는 것 = 스왑 아웃

스왑 영역에 있던 프로세스가 다시 메모리로 옮겨오는 것 = 스왑 인

프로세스들이 요구하는 메모리 주소 공간의 크기가 실제 메모리 크기보다 큰 경우에도 프로세스들을 동시 실행할 수 있다.

메모리 내에 빈 공간이 여러 개 있다면 프로세스를 어디에 배치할지를 결정해야 함.
최초 적합
운영체제가 메모리 내의 빈 공간을 순서대로 검색하다가 적재할 수 있는 공간을 발견하면,

그 공간에 프로세스를 배치하는 방식

프로세스가 적재될 수 있는 공간을 발견하는 즉시 메모리를 할당하기 때문에 검색을 최소화할 수 있어 빠른 할당이 가
최적 적합
운영체제가 빈 공간을 모두 검색해 본 후, 프로세스가 적재될 수 있는 공간 중 가장 작은 공간에 프로세스를 배치하는 방식
최악 적합
운영체제가 빈 공간을 모두 검색해 본 후, 프로세스가 적재될 수 있는 공간 중 가장 큰 공간에 프로세스를 배치하는 방식

[ 페이징 ]

프로세스의 논리 주소 공간을 페이지라는 일정한 단위로 자르고, 메모리 물리 주소 공간을 프레임이라는 페이지와 동일한 크기의 일정한 단위로 자른 뒤 페이지를 프레임에 할당하는 가상 메모리 관리 기법
페이징에서 주소 변환
1. 어떤 페이지 & 프레임에 접근하고 싶은지

2. 접근하려는 주소가 그 페이지나 프레임으로부터 얼마나 떨어져 있는지

=> 2가지 조건을 바탕으로 특정 주소에 접근하므로 모든 논리 주소는 페이지 번호와 변위로 이루어져 있음.
내부 단편화 문제
페이징 과정에서 모든 프로세스가 페이지 크기에 딱 맞게 잘릴 수 없음. (=모든 프로세스의 크기가 페이지의 배수는 아님), 이런 과정에서 생기는 메모리 낭비

[ 페이지 테이블 ]

페이지 번호와 프레임 번호를 짝지어 주는 이정표로, 프로세스가 물리 주소에 불연속적으로 배치되더라도 논리 주소에는 연속적으로 배치되도록 하기 위해 이용
페이지 테이블 베이스 레지스터 (PTBR)
각 프로세스의 페이지 테이블이 적재된 주소
페이지 테이블 캐시 메모리 (TLB)
페이지 테이블을 메모리에 두면 메모리 접근 시간이 2배로 늘어나는데, 이러한 문제를 해결하기 위해 CPU 옆에 두는 페이지 테이블의 캐시 메모리
TLB 히트, TLB 미스
TLB 히트는 CPU가 발생한 논리 주소에 대한 페이지 번호가 TLB에 있을 경우 발생, TLB 미스 는 페이지 번호가 TLB에 없어 메모리 내의 페이지 테이블에 접근
페이지 테이블 엔트리
페이지 테이블의 각 엔트리 (=페이지 테이블의 각 행)
유효 비트
해당 페이지에 접근 가능한지 여부

현재 페이지가 메모리에 적재되어 있는지 혹은 보조기억장치에 있는지 알려주는 비트 ( 적재되어 있으면 1, 아니면 0 )
IF, 유효비트가 0인 메모리에 접근하면?
페이지 폴트 예외가 발생함.
페이지 폴트 처리
1. CPU가 기존 작업 백업

2. 페이지 폴트 처리 루틴 실행

3. 페이지 처리 루틴은 원하는 페이지를 메모리로 가져8와 유효 비트를 1로 변경

4. 페이지 폴트 처리 후 CPU는 해당 페이지에 접근 가능
보호 비트
페이지 보호 기능

해당 페이지가 읽고 쓰기가 모두 가능한 페이지인지, 혹은 읽기만 가능한 페이지인지 알 수 있음

( 읽기만 가능하면 0, 모두 가능하면 1 )

실행하기(Execute) 기능 추가 가능
참조 비트
CPU가 이 페이지에 접근한 적이 있는지 여부

(CPU가 읽거나 쓴 페이지는 1, 그런 적이 없으면 0 )
수정 비트 (더티 비트)
해당 페이지에 데이터를 쓴 적이 있는지 없는지 수정 여부

( 변경된 적이 있다면 1, 변경된 적이 없다면 0 )

페이지가 메모리에서 사라질 떄 보조기억장치에 쓰기 작업을 해야 하는지, 할 필요가 없는지를 판단하기 위해 존재

[ 요구 페이징 ]

프로세스를 메모리에 적재할 때 모든 페이지를 적재하지 않고 필요한 페이지 만을 메모리에 적재하는 기법

(=실행에 요구되는 페이지만 적재)
순서
1. CPU가 특정 페이지에 접근하는 명령어를 실행

2. 해당 페이지가 현재 메모리에 있을 경우, CPU는 페이지가 적재된 프레임에 접근

3. 해당 페이지가 현재 메모리에 없으면 페이지 폴트 발생

4. 페이지 폴트 발생시, 해당 페이지를 메모리로 적재하고 유효 비트를 1로 설정

요구 페이징이 안정적으로 작동하려면, 1. 페이지 교체 / 2. 프레임 할당 과정이 해결되어야 함.

[ 페이지 교체 알고리즘 ]

메모리에 적재된 많은 페이지 중 어떤 페이지를 내보내는 것이 좋을지 결정하는 알고리즘

페이지 폴트가 적게 발생해야 좋은 페이지 교체 알고리즘임 ( 페이지폴트 발생 시 보조기억장치에 다녀와야 하므로 시간⬆️)

=> 페이지 폴트 횟수는 페이지 참조열을 통해 알 수 있음
페이지 참조열
CPU가 참조하는 페이지들 중 연속된 페이지를 생략한 페이지열
1. FIFO 페이지 교체 알고리즘
메모리에 가장 먼저 올라온 페이지부터 보조기억장치로 보내는 방식 (= 오래 머물면 나가)

구현이 간단하지만, 프로그램 실행 내내 사용될 내용은 보존해야 되는데 먼저 적재되었다는 이유로 보조기억장치로 내쫓길 수 있음

(+) 이를 개선한 2차 기회 페이지 교체 알고리즘
2. 최적 페이지 교체 알고리즘
CPU에 의해 참조되는 횟수를 고려하는 페이지 교체 알고리즘

보조기억장치로 내보내야 할 페이지는 앞으로 사용 빈드가 가장 낮은 페이지로 생각하고, 앞으로 사용 반도가 가장 낮은 페이지를 교체하는 알고리즘 (*가장 오래 사용되지 않을 페이지를 교체)

낮은 페이지 폴트율을 보장할 수 있는 장점

사용 빈도가 낮을 페이지를 예측해야 하기 때문에 구현이 어려운 단점
3. LRU 페이지 교체 알고리즘
가장 오래 사용되지 않을 페이지를 교체하는 알고리즘

외에도 다양하게 존재!

프레임이 3개, 페이지 참조열이 2313523423이면, LRU 알고리즘을 사용했을 때 페이지 폴트가 몇 번 발생하는가?
2 3 1 3 5 2 3 4 2 3
(2)(1)(5) ==> 3번

# data[].attributes.attachment_link.description
연속 메모리 할당 ]프로세스에 연속적인 메모리 공간을 할당하는 방식 외부 단편화 문제프로세스가 실행되고 종료되길 반복하며 메모리 사이에 빈 공간이 생김.

# data[].attributes.attachment_link.title
게임 on Instagram: "처음에는 거창한 마음을 가지고 시작했습니다. 내가 프로그래밍 마스터가 되겠다. 진짜 진짜진짜 열심히 공부하겠다!!! 이런 마음이었습니다. 처음에는 필수 과제는 물론 선택 과제까지 전부 마쳐서 제시간에 제출했습니다. 쉽네, 할 만 하네라고 생각했습니다. 그런데 방학이 지나고 나니까 사람이 너무 나태해져서 그런지 시간도 못지키고 선택 과제도 하기 싫어지더라고요. 그래서 그냥 안 했습니다. 제출했다는 것에 의의를 두기로 했습니다. 그렇게 마지막 주 과제도 00시 1분에 제출하면서 유종의 미를 애매하게 거두었습니다. 꾸준히라는 것이 생각보다 어렵네요. 덕분에 방학이 알차지진 않았습니다. 그러나 내가 방학동안 이룬 것들 목록에 혼공단 완료하기라는 한 가지가 생겼습니다. 원래 텅텅 비어있어야 정상인데 뭐가 적혀있으니까 어색하긴 하네요. 간식도 받아서 너무 좋았습니다. 겨울에도 또 하고싶습니다.
#혼공단 #혼공프로"

# data[].attributes.attachment_link.description
0 likes, 0 comments - wjwjjwd.p on August 25, 2024: "처음에는 거창한 마음을 가지고 시작했습니다. 내가 프로그래밍 마스터가 되겠다. 진짜 진짜진짜 열심히 공부하겠다!!! 이런 마음이었습니다. 처음에는 필수 과제는 물론 선택 과제까지 전부 마쳐서 제시간에 제출했습니다. 쉽네, 할 만 하네라고 생각했습니다. 그런데 방학이 지나고 나니까 사람이 너무 나태해져서 그런지 시간도 못지키고 선택 과제도 하기 싫어지더라고요. 그래서 그냥 안 했습니다. 제출했다는 것에 의의를 두기로 했습니다. 그렇게 마지막 주 과제도 00시 1분에 제출하면서 유종의 미를 애매하게 거두었습니다. 꾸준히라는 것이 생각보다 어렵네요. 덕분에 방학이 알차지진 않았습니다. 그러나 내가 방학동안 이룬 것들 목록에 혼공단 완료하기라는 한 가지가 생겼습니다. 원래 텅텅 비어있어야 정상인데 뭐가 적혀있으니까 어색하긴 하네요. 간식도 받아서 너무 좋았습니다. 겨울에도 또 하고싶습니다.
#혼공단 #혼공프로". 

# data[].attributes.attachment_link.embed_code
View this post on Instagram

A post shared by 게임 (@wjwjjwd.p)

# data[].attributes.headline
6주차 우수혼공족 발표 + ID 제출 안내

# data[].attributes.subject
6주차 우수혼공족 발표 + ID 제출 안내

# data[].attributes.body
마무리는 했지만, 아직 6주차 제출 안하신 분들은 8월 말까지 제출하시면 마일리지 적립 가넝합니다. 포기하지 마십쇼

# data[].attributes.attachment_link.title
[혼공학습단 12기] 6주차 우수 혼공족 발표 + 미션 내용 공유🤭🍀

# data[].attributes.body
늦은 6주차 인증입니다. 5주차도 곧 올릴게요!! 포기 하지 않겠습니다 ㅠㅠ

# data[].attributes.attachment_link.readable_text
06. 실습으로 복습하는 네트워크

와이어샤크를 이용해서 실제 패킷 분석 ➡️ 기본 & 추가 숙제를 통해 정리함

🏅기본 숙제

Ch.06(06-2) 확인 문제 1번(p.379) 풀고 설명하기

정답 : 3588415412

호스트 B ➡️ 호스트 A
호스트 A의 연결요청을 받고 나서 연결 수립
세그먼트에 포함된 주요정보에는 호스트 A가 전송한 세그먼트에 대한 확인 응답 번호 즉, 다음으로 수신하기를 기대하는 순서번호가 와야 한다.
문제에서 제시한 첫번째 패킷에 호스트 A의 순서번호를(358841512)를 남겼으므로, 확인응답번호에는 A의 순서번호가 와야 한다.

🎁추가 숙제

07. 네트워크 심화

07-1. 안정성을 위한 기술1 : (서버)시스템을 안전하게 하는 기술

수강 신청이나, 공연 티케팅을 할 때처럼 하나의 서버에 다수의 클라이언트들이 동시 다발적으로 몰려 요청을 보내면 서버가 다운되거나 요청이 제대로 처리되지 않는 경우가 있는 데, 이를 위해 안정적으로 서버를 운영할 수 있는 기술 이 필요하다.

✔️ 네트워크에서 '안정성'이란?
특정 기능을 언제든 균일한 성능 으로 수행할 수 있는 특성.

✔️ 가용성이란?
안정성의 정도를 나타내는 용어로, 컴퓨터 시스템이 특정 기능을 실제로 수행할 수 있는 시간의 비율

가용성 = 정상적인 사용시간/ 전체 사용시간
= 업타임/ 업타임 + 다운타임

-> 가용성이 높을 수록 안정적인 서비스 제공 할 수 있다.
가용성이 높다.
: 전체 사용시간 대비 정상적인 사용시간이 높다.
: 전체 사용시간 대비 다운타임이 비중이 낮다.

➡️ 가용성을 높이려면 다운타임(비 정상적인 사용시간)을 낮춰야 한다.
다운타임의 원인은 다양하기 때문에 현실적으로 통제하기 까다롭다. 대신, 문제 발생하더라도 정상적으로 계속 사용할 수 있는(결함을 감내할 수 있는) 서비스나 인프라 설계가 필요

➡️ 가용성을 높이는 방법
1. 이중화
2. 로드 밸런싱

✔️ 이중화

이중화
문제 발생할 경우 시스템 전체가 중단될 수 있는 대상(단일 장애점)을 하나만 두는 것이 아니라, 이중으로 두는 기술 즉, 예비(백업)를 마련해 두는 방법
-> 이중화를 발전시켜 '다중화'하여 더욱 안정적으로 운영하는 방식도 있음

이중화 방식

1. 액티브/스텐바이 방식
: 시스템 가동하고, 백업 시습템은 대기하는 상태
: 부하가능성 낮고 안전함, 하나의 장비 사용할 때 대비 성능이 높진 않음

2. 액티브/액티브 방식
: 시스템 가동하고, 백업 시스템도 가동하는 상태
: 빠른 처리가능, 부하가능성 있음

✔️ 로드 밸런싱(load balancing)

하나의 서버에 트랙픽이 몰리는 것을 방지하고 트래픽의 고른 분배를 위해 사용되는 기술

시스템을 이중화, 다중화하여 서버를 여러개 두었다 하더라도 하나의 서버에 트래픽이 몰리면 가용성은 낮아짐.

트래픽
주어진 시점에 네트워크를 경유한 데이터의 양

1. 라운드 로빈 알고리즘 : 단순히 서버를 돌아가며 부하 전달

2. 최소 연결 알고리즘 : 연결이 적은 서버부터 우선적으로 부하 전달

07-2. 안정성을 위한 기술2 : 데이터를 안전하게 전달하는 기술

암호화 및 복호화
메시지를 주고 받는 당사자(클라이언트-서버)이외에 제 3자가 메시지를 훔쳐보거나 가로채지 못하도록 원문 데이터를 알아 볼 수없는 형태로 변경하는 것을암호화라 하고, 반대로 암호화된 데이터를 다시 원문 데이터로 되돌리는 것을 복호화라 한다.

암호문 만들기
{원문 데이터 + 키} --(암호화 알고리즘)--> 암호문

대칭 키 암호화

암호화 할 때 사용하는 키와 복호화 할 때 사용하는 키가 같다.
키는 사전에 전달하여 공유되어 있다.
키를 얼마나 안전하게 전달하느냐(제 3자에게 노출되지 않고)가 중요한 문제

공개 키 암호화

암호화 할 때 사용하는 키(공개키)와 복호화 할 때 사용하는 키(개인키)가 다르다.
송신자가 수신자에게 공개키를 요청하는 과정이 있다.
공개키는 제 3자에게 공개되어도 무방한 반면, 개인키는 공개되면 안된다.

✔️ A(클라이언트)가 B(서버)에게 '안녕'이라는 메시지 전송하는 상황
A:'안녕' 메시지 가지고 있음
A ➡️ B : 공개키 요청
B ➡️ A : 공개키 전달
A ➡️ B : 암호문 {'안녕'(원문 메시지) + 공개키 } 전달
B: 암호문을 개인키 이용해서 복호화

HTTPS:SSL과 TLS

대칭 키 암호화와,공개키 암호화 방식을 기반으로 동작하는 프로토콜이 SSL, TLS이며, 이러한 SSL/TLS를 사용하는 대표적인 프로토콜이 HTTPS이다.

HTTPS(HTTP over TLS)는 HTTP 메시지의 안전한 송수신을 위해 개발된 프로토콜이다.

TLS 1.3 기반 HTTPS 동작 방식

TLS 핸드 셰이크
1단계 : 암호화된 통신을 위해 사전 협의해야 할 정보를 결정

A ➡️ B : ClientHello메시지 전송
: 암호화된 통신을 위해 맞춰봐야 할 정보들을 제시
: 지원 TLS 버전, 사용가능한 암호화 방식과 해시 함수( 암호 스위트)

B ➡️ A : 응답 ServerHello 메시지 전송
: 선택된 TLS 버전 및 암호 스위트 등 포함

2단계 : 1단계 결정된 정보를 토대로 서버와 클라이언트가 사용할 키를 만듬

B ➡️ A : Certificate 메세지와 Certificate Verify 메시지 전송
: 인증서와 검증을 위한 디지털 서명

A : 서버의 공개 키 검증

TLS 핸드셰이크 마지막 의미하는 Finished 메시지 주고 받음

🏅기본 숙제

Ch.07(07-2) 확인 문제 2번(p.407) 풀고 설명하기

정답 : 3.ServerHello

07-3. 무선 네트워크

전파 신호
: 무선통신 연결 매체
: 눈에 보이지 않는 전자기파의 일종
: 서로 다른 전파 신호를 구분할 수 있도록 통신에 사용되는 전파에는 '주파수 대역'이 미리 설정되어 있음

와이파이와 802.11
: 오늘날 LAN 환경에서 무선 통신은 IEEE 802.11로 표준화되어 있고, 이 표준은 대부분 2.4GHz, 5GHz 대역을 사용함( 무선통신 네트워크에서 사용되는 주파수)
: 와이파이는 특정 IEEE 802.11 규격을 준수하는 기술

AP와 서비스 셋
: AP는 무선 네트워크를 생성하기 위해 필요한 '무선 액세스 포인트'를 나타냄
: 무선 LAN 기기들은 AP를 경유해 인터넷에 접속하거나 메시지를 주고 받을 수 있음.
: 서비스 셋은 무선 네트워크를 이루는 AP와 여러 장치들의 집합을 의미하고, 같은 서비스 셋에 속한 장치들은 가은 네트워크에 속한다.

# data[].attributes.attachment_link.title
[혼공네트]6주차_06.실습으로 복습하는 네트워크 & 07.네트워크 심화

# data[].attributes.attachment_link.description
06. 실습으로 복습하는 네트워크 와이어샤크를 이용해서 실제 패킷 분석 ➡️ 기본 & 추가 숙제를 통해 정리함 🏅기본 숙제 > Ch.06(06-2) 확인 문제 1번(p.379) 풀고 설명하기 정답 : 3588415412 호스트 B ➡️ 호스트 A 호스트 A의 연

# data[].attributes.body
죄송합니다. 또 다시 지각했네요 어이쿠... 다음 혼공단에서는 일찍 일찍 올리는 착한 어른이가 되겠습니다

# data[].attributes.attachment_link.readable_text
결국 마지막 주까지 지각해버린 지각쟁이 입니다.

최근 개발자로 진로변경을 해보려고 이리저리 지원서는 넣었는데 서류통과조차 하나도 안되네요... 50개나 넣었는뎅...

너무 간단한 쇼핑몰 프로젝트만 진행해서 담당자 분이 싫어하셨나... 아니면 GPT때문에 안뽑는건가...

맨탈이 터져버려서 출근 퇴근 잠만 반복하다가 아침에 혼공단이 기억나 써봅니다.

제발 합격시켜주세요 개발자가 하고싶어요.

Ch.04(04-5) 확인 문제 풀고 인증하기(p. 340 ~ 341)

1. 다음 중 문장에 들어갈 알맞은 단어를 보기에서 찾아 작성해 보세요

컴퓨터에 설치된 프로그래밍 언어의 경로를 프로그램에 알려주기 위해 ( 환경 변수 )가 사용됩니다.

소프트웨어를 개발하는 도중 이미 개발된 유용한 기능을 넣기 위해 ( 라이브러리 )를 받아 사용할 수 있습니다

프로그램을 만들 떄 필요한 도구들을 제공하는 것은 ( SDK ), 프로그램의 기초 설계를 미리 구성해둔 것을 ( 프레임 워크 ) 라고 합니다.

2. 다음 중 틀린 것을 고르세요

1. 패키지 매니저는 언어에 따라 디버그나 빌드에도 사용될 수 있습니다.

2. 환경 변수의 값은 프로그램의 코드에 들어갑니다.

3. JVM은 JRE에 포함됩니다.

4. SDK는 개발자 편의를 위해 제공됩니다.

5. 라이브러리는 개발자가 작성하는 코드에 import되어 사용됩니다.

정답 : b 환경변수의 값은 프로그램 코드외 바깥에 존재한다

3. 다음 중 나머지 넷과 종류가 다른 하나를 고르세요

1. apt-get -- 리눅스 기반 패키지 매니저

2. pip -- 파이썬 기반 패키지 매니저

3. Gradle -- 자바기반 패키지 매니저

4. JDK -- 자바기반 SDK 툴

5. NPM -- Node 기반 패키지 매니저

정답 : d번 만 피키지 매니저가 아님

4. 다음 용도 중 환경 변수를 사용하기 적합하지 않은 것을 고르세요

1. 소프트웨어가 사용할 언어가 설치된 위치

2. 외부에 노출되어서는 안되는 코드

3. 소프트웨어 버전 정보

4. 실제로 배포될 컴퓨터인지 여부

5. 소프트웨어를 실행할 서버의 식별값

정답 : c번 소프트웨어 버전 정보는 공개되어야 하며 딱히 환경변수로 등록할 필요가 없다

깃, 깃 호스팅 서비스 강의 듣고 정리하기(p. 346 ~ 354)

대부분의 프로젝트에서 2이상의 개발자가 동시에 많은 기능을 추가하고 코드를 변경한다.

이 경우 충돌이 발생 할 수 있고 이로 인해 오류가 발생한다.

따라서 이러한 충돌을 방지하기 위한 시스템으로 버전 관리 시스템이 필요하다.

분산형 버전 관리 시스템이며 리누스 토르발스가 개발하고 오픈소스 형태로 공개되어 있습니다.

1. 이력 기록 및 추적 가능

누가, 언제, 어떤 파일을, 어떻게 수정했는지 이력을 저장하여 충돌이 발생하고 문제가 생겼을때 복원이 가능합니다.

2. 원격 저장소 및 공유

원격 저장소, 로컬 저장소로 코드를 분산하여 저장 - 소스코드와 변경이력을 모두 저장하기에 원격 저장소가 망가져도 로컬 저장소(개발자)로 복원이 쉽습니다.

3. 변경 이력 병합

동일한 소스 코드를 변경 이력을 통합할 수 있습니다. (git merge)

깃 프로젝트 호스팅을 지원하는 서비스로 개발자가 손쉽게 원격저장소로 지정하고 깃을 사용할 수 있게 만들어주는 웹 서비스

# data[].attributes.body
머리 속에서 내용이 마구 뒤섞여버리는 단점이 ... ㅠㅠ

# data[].attributes.attachment_link.title
[혼공분석] 6주차_복잡한 데이터 표현하기

# data[].attributes.attachment_link.description
파이썬으로 그래프 그리기pyplot 방식matplotlib.pyplot에 있는 함수를 이용해 그래프 그리는 방법이다. 함수들이 하나의 Figure 객체에 대한 상태를 공유한다.객체지향 APIFigure 객체와 서브플롯 객체를 만들고 이 객체의 메서드를 사용하여 그래프를 그릴 수 있다.그래프에 한글 출력하기구글 코랩에서 그래프를 그릴 때 한글을 이용해 그래프를 그릴 수 있다.import sys# 코랩의 경우 나눔 폰트를 설치if 'google.colab' in sys.modules: !sudo apt-get -qq -y install fonts-nanum import matplotlib.font_manager as fm font_files = fm.findSystemFonts(fontpat..

# data[].attributes.body
회고록 올리는 걸 깜박 잊고 고급편 슬쩍 넘겨보고 있었습니다... 지각인가요 ㅜㅡㅜ

매주 해주시는 숙제 검사와 한 줄 코멘트에 동기 부여를 받아서 끝까지 완주할 수 있었던 것 같습니다. 그동안 감사했습니다! 다음 기수도 꼭 참여하고 싶어요!!!

# data[].attributes.attachment_link.readable_text
C언어 공부해야지!! 하고 무작정 구매했던 혼자 공부하는 C언어... (왜냐면 진짜 혼자 공부함 ㅋㅋ) 며칠 몇 달을 여유가 없고 학교 다니기 힘들고 정신 없다는 이유로 방치했다가... 우연히 발견한 혼공단에 참여해서 책을 펴보기 시작했음..!!

몇 년 전만 해도 하고자 하는 일이 생기면 끝을 봐야 마음에 드는 그런 성격으로 살았는데, 요즘엔 시작도 힘들고 꾸준히 한 가지를 파는 건 더 힘들어져서 자책을 하기도 하고 끈기 빼면 시체라고 불렸던 터라 정말 시체가 된 걸까하는 생각도 많이 했었다. 혼공단도, 학교 계절학기 수업과 연구실 방문.. 알바, 운전 면허 취득 등.. 다양한 일을 벌여놓은 상태에서 하나 추가된 거라서 과연 끝까지 할 수 있을까 싶기도 했다. (지금 생각해보면 무슨 자신감으로 신청을 넣었는지 잘 모르겠음... ㅎㅎ) 자신감도 자존감도 뚝뚝 떨어지던 시기에 시작한 혼공단은 C언어에 대한 비교적 탄탄한 기반과 함께 왠지 모를 자신감도 같이 준 것 같다. 무작정 신청 넣은 과거의 나 ... 칭찬해~~

6주 (방학 포함 7주)간의 스터디 기록을 완주했다는 사실 자체가 엄청난 뿌듯함으로 다가왔다!! 기본편이 끝나고 남아있는 부분을 조금씩 펼쳐보면서도, 13기가 시작하면 또 참여해야지..ㅎㅎ 하는 생각이 계속 든다.

(ㅠㅠ 쓰다가 날아감... 엉엉)

C언어는 오래 된 언어이기도 하고 하나 하나 다 설정해줘야 하는 까다로운 친구라서, 더 많은 시간을 들여 기본기를 아주... 탄탄하게 쌓아야 한다는 걸 깨닫게 된 활동이었다. 포인터도, 그 뒤에 나올 재귀 함수같은 다양한 함수들도 크나큰 벽이겠지만 꼭 넘어야 할 벽이겠지...!

짧지 않은 시간동안 진행한 활동이기 때문에, 조금 더 알차고 더 많은 공부를 할 수 있지는 않았을까하는 아쉬움과 후회도 남는다. 분명 더 꼼꼼하게 기본을 쌓을 수 있는 충분한 시간이었을텐데..하는 아쉬움. 그렇지만 어쨌든 책의 반틈 정도를 한 번 다 봤고 살짝 늦는 주차도 있었지만 빠지지 않고 모든 주차를 참여했다는 것에 의의를 두어야지..! 그리고 그 사이에 나도 모르는 사이에 쌓였을 기본적인 내용을 더 확장될 공부로 더 탄탄하게 만들어야겠다는 다짐!

약한 강제성...과 다음 주도 참여해야겠다는 동기부여가 꾸준히 끝까지 완주하는 데 엄청난 힘이 되었습니다. 이 엄청난 활동을 기획하고 실행해주신 혼공 족장님께 감사하다는 말을 전합니다!! 다음 기수도 꼭! 참여하고 싶어요!! 감사했습니다 ㅎ.ㅎ

# data[].attributes.attachment_link.description
C언어 공부해야지!! 하고 무작정 구매했던 혼자 공부하는 C언어... (왜냐면 진짜 혼자 공부함 ㅋㅋ) 며칠 몇 달을 여유가 없고 학교 다니기 힘들고 정신 없다는 이유로 방치했다가... 우연히 발견한 혼공단에 참여해서 책을 펴보기 시작했음..!!

# data[].attributes.body
마지막 6주차 제출입니다~!

# data[].attributes.attachment_link.readable_text
6주차!

벌써 6주차! 혼공단의 마지막 주가 되었다..
언제 6주차까지 끝내지라고 생각했는데, 하루하루 다른 일들도 하면서 보내다보니 벌써 8월 끝자락에 왔다.
마지막까지 화이팅해서 글을 작성해보자!

현재 백엔드를 공부하면서 서버를 배포할 일이 생겼는데
AWS에 배포한 백엔드와 프론트가 HTTPS, HTTP 충돌이 났다.
충돌방지를 위해 인증서를 발급받아서 HTTP도 허용을 하도록 해라- 라는데..
SSL? TLS? 들어는 봤지만 정확히 쟤네가 뭔지를 모르니까 머리가 터지려던 찰나!
6주차 내용에서 이와 관련된 챕터가 있어서 딱 타이밍 좋게 공부할 수 있었다.

오늘의 게시 내용은 이거다!

[이번 주차 숙제✍️]

쓰리 웨이 핸드셰이크상에서 다음 세그먼트의 Acknoeledgment number는 ?

→ 그림에 표시된 그 전 raw값이 3588415412니까 이 담은 +1한 값인 3588415413

다음 그림은 두 호스트 TLS 핸드셰이크를 하는 과정이다. TLS 관련 메시지로 알맞은 것?

③ServerHello

[암호와 인증서]

암호화: 원문 데이터 → 🤔: 얘를 어떻게 알아볼까..?

복호화: 암호화된 데이터 → 원문 데이터

암호화와 복호화는 안전한 데이터 송수신 + 인증서 기반의 검증 가능!

암호화와 복호화의 핵심은 뭐다? '🔑 (키)'

[대칭 키 암호화 방식과 공개키 암호화 방식]
💡대칭키 암호화 하지만 한 가지 문제가 있다!

바로바로.. 상대방에게 안전하게 🔑 를 전달하기 어렵다는 것! (두둥)

동일한 🔑 를 사용하기에 🔑 가 유출될 가능성도 높아지는데 유출되면 중요한 정보를 암호화한 의미가 사라진다.
그래서 이러한 점을 보완하기 위해 등장한 것이 바로"공개 키 암호화"
💡공개 키 암호화(비대칭 키 암호화)

단일한 키를 사용한 대팅 키 암호화 달리, 암호화/복호화 방식에서 사용한 키가 다름

공개 키(암호화): 🗝️, 개인 키(복호화): 🔑 ➡️ 키 안전하게 공유 가능

암호화, 복호화에 시간과 부하 상대적으로 많이 든다.

[인증서와 디지털 서명]

네트워크에서 사용되는 인증서란? ➡️ 공개 키 인증서
💡공개 키 인증서
🤔: "전송 도중에 조작된건 아니지?"

🤔: "누가 만들었는지, 유효기간은 언제까지인지, 조작은 안되었는지 포함해서 인증 기관 에서 인증서 만들면 ㅇㅋ해줌"

💡인증 기관 (Certification Authority)

제 3의 기관

인증서 발급, 검증, 저장 역할 수행

서명값(signature) "내가 이 인증서 보증한다. ✍️"
인증서 내용에 대한 해시 값 ➡️ CA의 개인 키로 암호화 하는 방식으로 생성
해시 값: 임의의 길이의 데이터를 고정된 길이의 데이터로 변환해주는 함수를 적용시킨 결과 값.

[HTTPS: SSL과 TLS]

인증과 암호화를 수행하는 프로토콜

TLS ➡️ SSL을 계승한 프로토콜

이 둘의 작동 과정은 사용되는 암호 알고리즘과 버전에 따라 세부적인 차이는 있겠지만 크게 보면 비슷하다.

SSL/TLS를 사용하는 대표적인 프로토콜 ➡️ HTTPS

HTTPS는 안전한 송수신을 위해 개발된 프로토콜

TLS 1.3을 기반으로 HTTPS가 동작하는데 HTTPS는 크게 3단계를 거쳐서 송수신된다.

1️⃣ TCP 쓰리 웨이 핸드셰이크
2️⃣ TLS 핸드 셰이크
3️⃣ 암호화된 메시지 송수신

TCP 쓰리 웨이 핸드셰이크는 4주차에서 학습했었다!
간단하게 복습해보자면 두 호스트가 SYN, SYN+ACK, ACK 플래그가 설정된 TCP 세그먼트를 주고 받는 것이다.

다음으로 2번째 단계인 TLS 핸드 셰이크!

얘의 핵심은 2가지.

1️⃣ 암호화 통신을 위한 키를 교환한다.

2️⃣ 인증서 송수신과 검증이 이뤄진다.

먼저 클라이언트가 암호화된 통신을 위해 서로 맞춰 봐야 할 정보를 제시하는 메세지(ClientHello)를 보낸다.
여기에는 지원되는 TLS 버전, 사용 가능한 암호화 방식과 해시 함수(암호 스위트: Cipher suite) 등등이 포함되어있다.

서버는 ClientHello에 대한 응답으로 ServerHello 메세지를 전송.
클라이언트가 전송한 것은 암호화 이전에 맞춰 봐야 할 정보를 제시한다면, 서버에서는 제시된 정보를 선택한다.

서로 ClientHello, ServerHello를 주고받으면 암호화된 통신을 위해 사전 협의해야 할 정보가 결정된다.
이렇게 결정된 정보를 가지고 암호화에 사용할 키를 만들어낸다!

서버는 또 Certificate(인증서), CertificateVerify(디지털 서명) 메세지를 전송한다.
클라이언트는 이 메세지를 토대로 서버의 공개 키를 검증한다.

이런 방식을 통해서 암호화에 사용할 키와 인증서를 주고받을 수 있다라는 점!

# data[].attributes.attachment_link.description
얼음팩과 함께하는 요즘🧊

# data[].attributes.body
회고록도 늦었지만 제출해봅니다ㅎㅎ 매주 달아주신 댓글 덕분에 늦었지만 힘내서 완주할 수 있었습니다! 다음에도 꼭 참여하고 싶어용

# data[].attributes.attachment_link.readable_text
짧다면 짧고 길다면 긴 6주가 끝이 났는데 혼자서라면 이 두꺼운 책을 혼자서 6주 동안 할 수 있었을까 싶습니다..! 혼공학습단을 처음 참여해 봤는데 왜 이제야 알았을까 싶고 다음에 다른 책으로 또 참여하고 싶을 정도로 너무 좋았습니다! 매우 제출하고 나서 받는 족장님의 댓글도 너무 힘이 되었던 것 같아요ㅎㅎ 사실 6주 동안 혼공학습단 말고도 해야하는 업보들도 많았고 번아웃도 와서 고생했지만.. 조금 늦게라도 완주해서 너무 좋습니다!

# data[].attributes.attachment_link.description
짧다면 짧고 길다면 긴 6주가 끝이 났는데 혼자서라면 이 두꺼운 책을 혼자서 6주 동안 할 수 있었을까 싶습니다..! 혼공학습단을 처음 참여해 봤는데 왜 이제야 알았을까 싶고 다음에 다른 책으로 또 참여하고 싶을 정도로 너무 좋았습니다! 매우 제출하고 나서 받는 족장님의 댓글도 너무 힘이 되었던 것 같아요ㅎㅎ 사실 6주 동안 혼공학습단 말고도 해야하는 업보들도 많았고 번아웃도 와서 고생했지만..

# data[].attributes.body
이번엔 절대 안늦으려고 했는데.. 페이징이 너무 어려웠네용.. 그래두 완주해서 너무 기분 좋습니다!

# data[].attributes.attachment_link.readable_text
드디어 마지막주! 이번엔 늦지 않게 제출하고 싶었는데 페이징 파트가 너무 어렵기도하고 머리에 잘 안들어오더라구요...ㅎㅎ 그래서 머리에 들어올 때까지 반복해서 읽고 정리하다보니 늦어졌습니다..!

프로세스들을 메모리에 연속적으로 할당할 때 무엇을 고려해야 하는지

메모리 할당에는 대표적으로 최초 적합, 최적 적합, 최악 적합 세 가지의 방식이 있다.

프로세스를 메모리에 연속적으로 배치하는 연속 메모리 할당은 메모리를 효율적으로 사용하는 방법이 아니다. 왜냐하면 연속 메모리 할당은 외부 단편화라는 문제를 내포하고 있기 때문이다.

이는 다르게 말하면 한 프로세스를 실행하기 위해 프로세스 전체가 메모리에 적재될 필요가 없다는 말과 같다. 프로세스를 이루는 페이지 중 실행에 필요한 일부 페이지만을 메모리에 적재하고, 당장 실행에 필요하지 않은 페이지들은 보조기억장치에 남겨둘 수 있다. 이와 같은 방식을 통해 물리 메모리보다 더 큰 프로세스를 실행할 수 있다.

페이지 테이블은 페이지 번호와 프레임 번호를 짝지어 주는 일종의 이정표 역할로 CPU로 하여금 페이지 번호만 보고 해당 페이지가 적재된 프레임을 찾을 수 있게 한다. 즉, 페이지 테이블은 현재 어떤 페이지가 어떤 프레임에 할당되었는지를 알려준다. 프로세스마다 각자의 페이지 테이블을 가지고 있고 각 프로세스의 페이지 테이블들은 메모리에 적재되어 있다. 그리고 CPU 내의 페이지 테이블을 메모리에 두면 메모리 접근 시간이 두 배로 늘어난다는 단점이 있는데, 이와 같은 문제를 해결하기 위해 CPU 곁에 CPU가 발생한 논리 주소에 대한 페이지 번호가 TLB에 있을 경우 이를 페이지 테이블 베이스 레지스터(PTBR)는 각 프로세스의 페이지 테이블이 적재된 주소를 가리키고 있다. TLB라는 페이지 테이블의 캐시 메모리를 둔다. TLB는 페이지 테이블의 캐시이기 때문에 페이지 테이블의 일부 내용을 저장한다. 참조 지역성에 근거해 주로 최근에 사용된 페이지 위주로 가져와 저장한다. TLB 히트라고 하고 논리 주소에 대한 페이지 번호가 TLB에 없어 메모리 내의 페이지 테이블에 접근하는 것은 TLB 미스 라고 한다.

하나의 페이지 혹은 프레임은 여러 주소를 포괄하고 있기 때문에 특정 주소에 접근하려면 두 가지 정보가 필요하다.

① 어떤 페이지 혹은 프레임에 접근하고 싶은지

② 접근하려는 주소가 그 페이지 혹은 프레임으로부터 얼마나 멀리 떨어져 있는지

현재 해당 페이지에 접근 가능한지 여부를 알려준다. 즉 현재 페이지가 메모리에 적재되어 있는지 아니면 보조기억장치에 있는지를 알려주는 비트이다. 유효 비트가 0인 페이지로 접근하려고 하면
페이지가 메모리에 적재되어 있다면 유효 비트가 1, 메모리에 적재되어 있지 않다면 유효 비트가 0이 된다.
페이지 폴트 라는 예외가 발생한다.

페이지 보호 기능을 위해 존재하는 비트로 해당 페이지가 읽고 쓰기가 모두 가능한 페이지인지, 혹은 읽기만 가능한 페이지인지를 나타낼 수 있다.
읽기만 가능한 페이지인 경우 0, 읽고 쓰기가 가능한 페이지인 경우 1이 된다.
더 복잡하게 구현한 경우 r, w, x로 읽기, 쓰기, 실행하기 권한의 조합을 나타낼 수 있다.

+) 더 알아보기는 따로 공부해서 정리하겠습니당

요구 페이징의 개념과 페이지 교체 알고리즘, 그리고 프레임 할당에 대해서 학습

① CPU가 특정 페이지에 접근하는 명령어를 실행한다.

② 해당 페이지가 현재 메모리에 있을 경우 CPU는 페이지가 적재된 프레임에 접근한다.

③ 해당 페이지가 현재 메모리에 없을 경우 페이지 폴트가 발생한다.

④ 페이지 폴트 처리 루틴은 해당 페이지를 메모리로 적재하고 유효 비트를 1로 설정한다.

⑤ 다시 ①번을 수행한다.

좋은 페이지 교체 알고리즘은 일반적으로 페이지 폴트를 가장 적게 일으키는 알고리즘이다. 페이지 폴트가 일어나면 보조기억장치로부터 필요한 페이지를 가져와야 하기 때문에 메모리에 적재된 페이지를 가져오는 것보다 느려지기 때문이다.

페이지 폴트가 자주 발생했다 = 보조기억장치로 내쫓을 페이지를 잘못 골랐다.

페이지 폴트가 자주 발생하는 더 근본적인 이유는 프레임 수가 적기 때문이다. 반대로 프로세스가 사용할 수 있는 프레임 수가 많으면 일반적으로 페이지 폴트 빈도는 감소한다. 프레임이 부족하면 CPU는 페이지 폴트가 자주 발생하고 프로세스가 실제 실행되는 시간보다 페이징에 더 많은 시간을 소요하여 성능이 저해되는데 이러한 문제를 스래싱 이라고 한다.

스래싱이 발생하는 근본적인 원인은 각 프로세스가 필요로하는 최소한의 프레임 수가 보장되지 않았기 때문이다. 그렇기 때문에 운영체제는 각 프로세스들이 무리 없이 실행하기 위한 최소한의 프레임 수를 파악하고 프로세스들에 적절한 수만큼 프레임을 할당해 줄 수 있어야 한다.

프로세스를 실행하는 과정에서 배분할 프레임을 결정하는 방식으로는 크게 두 가지 방식이 있다. → 동적 할당 방식

'프로세스가 일정 기간 동안 참조한 페이지 집합'을 기억하여 빈번한 페이지 교체를 방지하는 것 실행 중인 프로세스가 일정 시간 동안 참조한 페이지의 집합을
작업 집합 이라고 한다. CPU가 과거에 주로 참조한 페이지를 작업 집합에 포함한다면 운영체제는 작업 집합의 크기만큼만 프레임을 할당해 주면 된다.

아래의 두 개의 가정에서 생겨난 아이디어이다. ① 페이지 폴트율이 너무 높으면 그 프로세스를 너무 적은 프레임을 갖고 있다. ② 페이지 폴트율이 너무 낮으면 그 프로세스는 너무 많은 프레임을 갖고 있다.

페이지 폴트율에 상한선과 하한선을 정하고, 이 범위 안에서만 프레임을 할당하는 방식이다.

파일과 디렉터리에 대해 학습

운영체제마다 유지하는 파일 속성을 조금씩 차이가 있지만, 대표적인 속성의 종류는 아래와 같다.

파일을 다루는 모든 작업은 운영체제에 의해 이루어진다.

파일과 디렉터리는 서로 다른 별개의 존재가 아니다. 많은 운영체제에서 디렉터리를 그저 '특별한 형태의 파일'로 간주한다. 즉, 디렉터리도 파일이다.

파일이 내부에 해당 파일과 관련된 정보를 담고 있다면, 디렉터리는 내부에 해당 디렉터리에 담겨 있는 대상과 관련된 정보를 담고 있다. 그리고 이 정보는 보통 테이블(표) 형태로 구성된다. 즉, 디렉터리는 보조기억장치에 테이블 형태의 정보로 저장된다.

파일 시스템은 파일과 디렉터리를 보조기억장치에 일목요연하게 저장하고 접근할 수 있게 하는 운영체제 내부 프로그램이다.

보조기억장치를 사용하려면 파티션을 나누는 작업( 파티셔닝)과 포맷 작업( 포맷팅)을 거쳐야한다. 파티셔닝은 저장 장치의 논리적인 영역을 구획하는 작업을 의미한다. 파티셔닝 작업을 통해 나누어진 영역 하나하나를 파티션이라고 한다. 포매팅 이란 파일 시스템을 설정하여 어떤 방식으로 파일을 저장하고 관리할 것인지를 결정하고, 새로운 데이터를 쓸 준비를 하는 작업을 의미한다. 즉, 어떤 종류의 파일 시스템을 사용지 결정된다.

운영체제는 파일과 디렉터리를 블록 단위로 읽고 쓴다. 즉, 하나의 파일이 보조기억장치에 저장될 때는 하나 이상의 블록에 걸쳐 저장된다. 하드 디스크의 가장 작은 저장 단위는 섹터이지만, 운영체제는 하나 이상의 섹터를 블록이라는 단위로 묶은 뒤 블록 단위로 파일과 디렉터리를 관리한다. 파일을 보조기억장치에 할당하는 방법에는 크게 두 가지가 있다.

가장 단순한 방식으로 보조기억장치 내 연속적인 블록에 파일을 할당하는 방식 파일을 그저 연속적으로 할당하는 방식이기에 구현은 간단하지만
외부 단편화 를 야기한다.

각 블록 일부에 다음 블록의 주소를 저장하여 각 블록이 다음 블록을 가리키는 형태로 할당하는 방식② 하드웨어 고장이나 오류 발생 시 해당 블록 이후 블록은 접근할 수 없다.
연결할당음 외부 단편화 문제를 해결하지만 이 또한 단점이 존재한다.
① 반드시 첫 번째 블록부터 읽어야 한다.
→ 이를 변형하여 사용한 파일 시스템이 FAT 파일 시스템

파일의 모든 블록 주소를 색인 블록이라는 하나의 블록에 모아 관리하는 방식
연결 할당과 달리 파일 내 임의의 위치에 접근하기 쉽다.
→ 이를 기반으로 만든 파일 시스템이 유닉스 파일 시스템

다양한 파일 시스템이 있지만 대표적으로 소개하는 파일 시스템에는 크게 두 가지가 있다.

USB 메모리, SD 카드 등의 저용량 저장장치에서 사용
각 블록에 포함된 다음 블록의 주소를 한데 모아 테이블의 형태로 관리하면 앞서 설명한 연결 할당의 단점을 상당 부분 해소할 수 있다. 이러한 테이블을 파일 할당 테이블(FAT)이라고 한다.
FAT 파일 시스템에서 FAT는 파티션의 앞부분에 만들어진다. 그 뒤이어 루트 디렉터리가 저장되는 영역이 있고, 그 뒤에 서브 디렉터리와 파일들을 위한 영역이 있다.

유닉스 계열 운영체제에서 사용② 첫번째 내용으로 충분하지 않다면 열세 번재 주소에 단일 간접 블록 주소를 저장한다.③ 두번째 내용으로 충분하지 않다면 열네 번째 주소에 이중 간접 블록 주소를 저장한다.④ 세번째 내용으로 충분하지 않다면 열다섯 번째 주소에 삼중 간접 블록 주소를 저장한다.
유닉스 파일 시스템에서는 색인 블록은 i-node라고 부른다. i-node에는 열다섯 개의 블록 주소가 저장될 수 있다. .i-node들은 파티션 내 특정 영역에 모여 있다. i-node 영역에 i-node들이 있고, 데이터 영역에 디렉터리와 파일들이 있다. i-node는 유한하기 때문에 i-node 하나만으로 파일의 데이터 블록을 모두 가리킬 수 없다. 유닉스 파일 시스템은 이러한 문제를 아래와 같이 해결한다.

① 블록 주소 중 열두 개에는 직접 블록 주소를 저장한다.

위의 방법으로 i-node만 알면 파일 속성뿐만 아니라 파일 크기가 크더라도 파일 데이터를 모두 가리킬 수 있다.

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

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

총 3번의 페이지 폴트가 발생한다.

# data[].attributes.attachment_link.description
드디어 마지막주! 이번엔 늦지 않게 제출하고 싶었는데 페이징 파트가 너무 어렵기도하고 머리에 잘 안들어오더라구요...ㅎㅎ 그래서 머리에 들어올 때까지 반복해서 읽고 정리하다보니 늦어졌습니다..! Chapter 14 가상메모리 14-1 연속 메모리 할당프로세스들을 메모리에 연속적으로 할당할 때 무엇을 고려해야 하는지 1.

# data[].attributes.body
회고록까지도 늦게제출하지만 매번 제출해내는게 스스로도 웃겨요

# data[].attributes.attachment_link.title
이진 : 네이버 블로그

# data[].attributes.headline
[혼공파] 회고록_박*리

# data[].attributes.subject
[혼공파] 회고록_박*리

# data[].attributes.body
회고록

# data[].attributes.attachment_link.title
[혼공파] 혼공학습단12기 회고록

# data[].attributes.attachment_link.description
아이고.. 어찌저찌 책 한 권을 읽기는 했네요. 마지막주에 지각제출을 하긴했지만...ㅎㅎ 사실, 뭐.. 모든…

# data[].attributes.body
마무리!! 비밀일기도 있습니다!!

# data[].attributes.body
또 늦었습니드아 ...

# data[].attributes.attachment_link.description
07 - 1 문서 객체 조작하기 → ‘문서 객체를 조작한다’ = ‘HTML 요소들을 조작한다‘→ 문서 객체 모델 : 문서 객체를 조합해서 만든 전체적인 형태 DOMContentLoaded 이벤트 → 오탈자를 입력해도 오류를 발생하지 않기 때문에 주의해서 입력해야한다. document.addEventListener(‘DOMContentLoaded’, ( ) => { //문장 } 1번째 h1 태그 2번째 h2 태그 → 웹 브라우저가 문서 객체를 모두 읽고 나서 실행하는 이벤트이다. 문서 객체 가져오기 → document.body : 문서의 body 요소를 읽어들일 수 있다. (or document.head, document.title…

# data[].attributes.body
어쩌다보니 6주 연속 지각 제출이었어서 매우 아쉽습니다.

확실히 혼공컴운 할 때보다 직접적으로 코드를 치면서 하다보니 시간이랑 체감되는 학습량이 많았습니다.

그래서 2회독 해볼까 합니다...

족장님 그동안 수고하셨습니다!!

# data[].attributes.attachment_link.readable_text
일단 6주 연속 지각 제출이라 뭐라 할 말이 없다.

그래도 이 책을 보면서 파이썬 문법에 대해 조금이나마 다룰 수 있었다는게 소득이다.

요즘들어 블로그에 글도 자주 못 쓰고... 이래저래 잘 안되는 것 같다.

하지만 어떻게든 앞으로 나가야 뭐라도 하지 않겠나 라는 생각을 요즘 들어서 많이 하고 있는 만큼

책 복습부터 할 생각이다.

이 책이 워낙 두껍기도하고 다루는 내용도 많다보니 1회독으로는 완벽하게 이해 했다, 다룰 줄 안다 라고는 말 하기 어렵다.

다시 시작해야지...

# data[].attributes.attachment_link.title
[혼공파] 혼공학습단 12기 회고

# data[].attributes.attachment_link.description
아......................일단 6주 연속 지각 제출이라 뭐라 할 말이 없다. 그래도 이 책을 보면서 파이썬 문법에 대해 조금이나마 다룰 수 있었다는게 소득이다.요즘들어 블로그에 글도 자주 못 쓰고... 이래저래 잘 안되는 것 같다. 하지만 어떻게든 앞으로 나가야 뭐라도 하지 않겠나 라는 생각을 요즘 들어서 많이 하고 있는 만큼책 복습부터 할 생각이다.

# data[].attributes.body
늦었지만 제출합니다

# data[].attributes.attachment_link.readable_text
혼공파 6주차 기본 미션

키워드로 정리하는 핵심 포인트

1. 외부 모듈은 파이썬이 기본적으로 제공치 않은, 다른 사람들이 만들어 제공하는 모듈을 의미.

2. pip install 은 외부 모듈을 설치할 때 사용하는 명령어

3. 제어 역전은 개발자가 모듈의 함수를 호출하는 것이 일반적인 제어 흐름이나, 이와 반대로 개발자가 만든 함수를 모듈이 실행하는 것.

4. 라이브러리는 개발자가 모듈의 기능을 호출하는 형태와 같이 정상적인 제어를 하는 모듈.

5. 프레임워크는 모듈이 개발자가 작성한 코드를 실행하는 형태의 모듈

6. 엔트리 포인트는 python 명령어를 사용해서 첫 진입 파일을 엔트리 포인트라고 부른다.

7. __name__ == "main" 는 현재 파일이 엔트리 포인트인지 확인할 때 사용하는 코드.

8. 패키지는 모듈이 모인 것

9. 객체는 속성을 가질 수 있는 모든 것

10. 객체 지향 프로그래밍 언어는 객체를 기반으로 프로그램을 만드는 프로그래밍 언어를 의미

11. 추상화는 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것을 의미

12. 클래스는 객체를 쉽고 편리하게 생성하기 위해 만들어진 구문

13. 인스턴스는 클래스를 기반으로 생성한 객체를 의미

14. 생성자는 클래스 이름과 같은 인스턴스를 생성할 때 사용하는 함수

15. 메소드는 클래스가 가진 함수를 의미.

16. isinstance() 함수는 어떤 클래스의 인스턴스인지 확인할 때 사용하는 함수

17. 클래스 변수와 클래스 함수는 클래스 이름 뒤에, (마침표) 를 찍고 바로 사용할 수 있는 클래스가 갖고 있는 변수와 함수.

18. 상속은 어떤 클래스를 기반으로 그 속성과 기능을 물려받아 새로운 클래스를 만드는 것.

# data[].attributes.attachment_link.title
[혼공파] 혼공학습단 6주차

# data[].attributes.attachment_link.description
혼공파 6주차 기본 미션 키워드로 정리하는 핵심 포인트1. 외부 모듈은 파이썬이 기본적으로 제공치 않은, 다른 사람들이 만들어 제공하는 모듈을 의미.2. pip install 은 외부 모듈을 설치할 때 사용하는 명령어3. 제어 역전은 개발자가 모듈의 함수를 호출하는 것이 일반적인 제어 흐름이나, 이와 반대로 개발자가 만든 함수를 모듈이 실행하는 것.4.

# data[].attributes.headline
[혼공프로] 혼공학습단 회고록 이*솜(9777)

# data[].attributes.subject
[혼공프로] 혼공학습단 회고록 이*솜(9777)

# data[].attributes.body
아니 으아니! 저는 6주 끝나고 회고타임인줄 알고 열심히 썼는데... 기간이 6주차랑 겹쳤네요... 아쉽지만 그래도 저의 마음 잘 적어서 공유하고 싶은 마음에... 늦었지만 공유해보아요! 그동안 학습단, 족장님 모두 감사했습니다. 사랑합니다! ^_^

# data[].attributes.attachment_link.title
공부도 하고 식사도 합니다 : 네이버 블로그

# data[].attributes.body
늦게나마.. 회고록 작성해서 제출해봅니다 진짜 뿌듯하네요..🫶 회고록에도 적었지만 정말 족장님과 스티디 덕분이에요감사합니다!!! 또 참여하구싶아요!!

# data[].attributes.attachment_link.readable_text
새삼 6주라는 시간이 짧지는 않다는 생각이 들었다. 분명 첫 글을 올릴 때는 독일이었는데 시간이 지나 어느덧 마지막글은 한국에서 올리고 있다.

혼공 학습단 스터디에 참여하길 정말 잘한 것 같다. 덕분에 책을 7장까지 볼 수 있었다!! 나혼자였다면 분명 1장만 좀 끄적거리다가 포기했을것이다.

그냥 포기할까 싶을때도 많았지만 정말 혼공족장님이 달아주실 댓글을 기대하면서 매주 꾸역꾸역 공부해서 올렸던 것 같다... 감사합니다!!!!

머신러닝에 딥러닝까지도 입문할 수 있어서 좋았다. 책이 쉽게 되어있어서 책만 읽어봐도 충분히 잘 이해할 수 있었고, 좀 어렵다싶거나 도저히 혼자 공부할 의지가 안 생기면 출판사 유튜브에 올라와있는 무료 저자 강의를 봤다. 이런 양질의 강의가 무료라니 정말 신기했다. 물론 아직 갈 길이 멀지만 어디가서 머신러닝과 딥러닝 조금은 해봤다고 할 수 있을 것 같다..ㅋㅋ

혼공 학습단은 끝났지만 아직 책의 뒷부분이 남아있기 때문에 혼자 계속 공부해봐야겠다.

# data[].attributes.attachment_link.description
혼공학습단 스터디에 6주동안 참가했다!! 일단 어떻게든 6주동안 일주일에 한 편씩 글을 올렸다는 게 조금 ...

# data[].attributes.body
에공 늦었네요..ㅠ

# data[].attributes.attachment_link.title
기록 : 네이버 블로그

# data[].attributes.body
6주차입니다!!

인증이 많이 늦었지만 지금이라도 올려봅니다ㅜㅜ

# data[].attributes.body
https://radical-guavaberry-6e1.notion.site/6-c33a3a83ed9849c495432d753ed2b76e?pvs=4

마지막 파이썬 실습은 시간도 없고 실행이 안돼서...🥹🥹 못 했습니다 마지막까지 고생하셨습니다~~

# data[].attributes.body
많이 늦었습니다.....그래도 제출...

# data[].attributes.attachment_link.readable_text
늦어따... 샤따 내리기 전에 얼른 제출하자...

07-1. 인공 신경망

패션 MNIST

타깃은 0~9까지의 숫자 레이블로 구성되어 있다.

로지스틱 회귀로 패션 아이템 분류하기

전체 데이터를 한꺼번에 훈련하는 것보다 샘플을 하나씩 꺼내어 훈련하는 방법이 더 효율적
-> 확률적 경사하강법

SGDClassifier

표준화 전처리된 데이터 사용

기울기가 가장 가파른 방향으로 이동하기 때문에

특성마다 값의 범위가 많이 다르면 안됨

패션 MNIST의 픽셀은 0~255 사이의 정수값 -> 0~1 사이의 값으로 정규화

28 * 28 = 784개의 특성이 있음

각 가중치들과 값을 곱한 다음 절편을 더한 것을 각 클래스에 대한 선형방정식으로 구함

계산한 값을 가지고 소프트맥스 함수를 통과하면 각 클래스에 대한 확률 얻을 수 있음

이것이 로지스틱 회귀 였다.

인공 신경망

가장 기본적인 인공신경망은 확률적 경사하강법을 사용하는 로지스틱 회귀와 같다.

인공신경망으로 모델만들기

10개의 패션 아이템을 분류하기 위해 10개의 뉴런으로 구성

케라스의 레이어 패키지 안에는 다양한 층이 준비되어 있음

가장 기본이 되는 층은 밀집층

양쪽의 뉴런이 모두 연결하고 있기 때문에 완전 연결층이라고도 부름

필요한 매개변수 : 뉴런 개수, 뉴런의 출력에 적용할 함수, 입력의 크기

1. 10개의 뉴런과 100개의 입력 연결 -> 1000개의 가중치. 뉴런마다 1개의 절편
-> 총 1010개

2. 이진분류일 때는 sigmoid 함수를 사용함

3. compile()에서 loss, metrics 로 측정 지표 지정했음

4. categorical_crossentropy = 원-핫 인코딩일 때
binary_crossentropy = 이진 분류
mean_square_error = 회귀 문제

07-2. 심층 신경망

인공 신경망에 층을 더 추가한다.

층을 추가하는 다른 방법

또다른 방법

렐루 함수

입력이 양수일 경우 마치 활성화 함수가 없는 것처럼 그냥 입력을 통과

음수일 경우에는 0으로 만듦

옵티마이저

optimizer 매개변수의 값을 변경해주면 됨.

1. add()로 전달

2. 입력 차원을 일렬로 펼치는건 Flatten 클래스

3. relu -> 이미지 처리 작업에 사용되는 활성화 함수
linear -> 선형 활성화 함수, 활성화 함수 적용하지 않는다는 것
tahn -> 하이퍼볼릭 탄젠트 함수

4. SGD -> 기본 경사하강법, 모멘텀, 네스테로프 모멘텀 알고리즘 구현할 클래스. 일정한 학습률을 사용
Adagrad, RMSprop, Adam은 적응적 학습률 옵티마이저

# data[].attributes.attachment_link.title
[혼공머신] 6주차 스터디

# data[].attributes.attachment_link.description
늦어따... 샤따 내리기 전에 얼른 제출하자...60,000개 이미지로 이루어진 훈련 데이터28 x 28 크기테스트는 10,000개의 이미지반전된 흑백 이미지타깃은 0~9까지의 숫자 레이블로 구성되어 있다.전체 데이터를 한꺼번에 훈련하는 것보다 샘플을 하나씩 꺼내어 훈

# data[].attributes.body
https://dsshin0110.tistory.com/453

# data[].attributes.attachment_link.title
[혼공] 혼공12기 혼공머신 6주차 기본미션

# data[].attributes.attachment_link.description
기본미션]Chapter07Ch.07(07-1) 확인 문제 풀고, 풀이 과정 정리하기어떤 인공 신경망의 입력 특성이 100개이고 밀집층에 있는 뉴런 개수가 10개일 때 필요한 모델 파라미터의 개수는 몇 개인가요?

# data[].attributes.body
6주차 + 회고입니다. 너무 바빠서 이제야 올리네요 ㅠㅠ 필기들은 나중에 따로 시간내어 올리고 하겠습니다. 자기주도학습 !!

# data[].attributes.attachment_link.readable_text
Chapter 07 ~ 08

p. 363 market_db의 고객 테이블(member)에 입력된 회원의 정보가 변경될 때 변경한 사용자, 시간, 변경 전의 데이터 등을 기록하는 트리거 작성하고 인증하기

p. 402 GUI 응용 프로그램 만들고 인증하기

create table a(select mem_id, mem_name, mem_number, addr from member); -- 백업 테이블 update from a where mem_number >=8;

2~4주차는 열심히 하고.... 했는데

5~6주차도 늦고 필기 조차 못했네요.................흐그그흐극극...

혼공단 13기가 올때까지 열심히 SQL 공부하고 오겠습니다..

# data[].attributes.attachment_link.description
6주차(8/12 ~ 8/18)Chapter 07 ~ 08p. 363 market_db의 고객 테이블(member)에 입력된 회원의 정보가 변경될 때 변경한 사용자, 시간, 변경 전의 데이터 등을 기록하는 트리거 작성하고 인증하기p. 402 GUI 응용 프로그램 만들고 인증하기create table a(select mem_id, mem_name, mem_number, addr from member);-- 백업 테이블update from a where mem_number >=8; 제가 1주차는 늦고....2~4주차는 열심히 하고....

# data[].attributes.body
조금 늦었지만 6주차까지 제출합니다!! 고생하셨습니다!:)

# data[].attributes.attachment_link.readable_text
예외exception : 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류

예외와 예외 클래스

일반 예외 exception : 컴파일러 체크 예외

실행 예외 runtime exception : 컴파일러 넌 체크 예외

자바에서는 예외를 클래스로 관리

모든 예외 클래스는 java.lang.Exception 클래스를 상속받음

일반 예외와 실행 예외 클래스는 RuntimeException 클래스 기준으로 구별, RuntimeException의 하위 클래스면 실행 예외 아니면 일반 예외

실행 예외

오로지 개발자의 경험에 의해서 예외 처리 코드를 작성해야 함!

NullPointerException

객체 참조가 없는 상태, null 값을 갖는 참조 변수로 객체 접근 연산자인 .를 사용했을 때 발생

<aside> <img src="/icons/notification_gray.svg" alt="/icons/notification_gray.svg" width="40px" /> 프로그램에서 예외 발생 → 예외 메시지가 Console 뷰에 출력되면서 프로그램 종료

</aside>

ArrayIndexOutOfBoundsException

배열에서 인덱스 범위를 초과할 경우 발생

NumberFormatException

포장Wrapper 클래스 : Integer , Double - 정적 메소드인 parseXXX() 메소드 이요하여 문자열→숫자 변환

숫자로 변환된 수 없는 문자가 포함되면 NumberFormatException 발생

ClassCastException

# data[].attributes.attachment_link.title
Chapter 10 예외 처리, Chapter 11 기본 API 클래스 | Notion

# data[].attributes.body
왕지각 대왕지각이지만 마무리하러왔습니다! 족장님 수고하셨습니다!!🍀 덕분에 완주할수있었습니다😎

# data[].attributes.attachment_link.readable_text
Ch.07-1 확인문제

​

1. 어떤 인공 신경망의 입력 특성이 100개이고 밀집층에 있는 뉴런 개수가 10개일 때 필요한 모델 파라미터의 개수는?

A: 1010개,

파라미터의 개수를 구하는 방법은 입력 특성에 출력층의 뉴런 개수를 곱한 가중치에 각 뉴런이 가지는 절편 개수를 더한다.
(입력특성) * (뉴런 개수) + (뉴런 개수)

100 * 10 + 10 = 1010

2. 케라스의 Dense 클래스를 이용해 신경망의 출력층을 만드려고 합니다. 이 신경망이 이진 분류 모델이라면 activation 매개변수에 어떤 활성화 함수를 지정해야 하나요?

A: Signoid 함수

Dense층은 밀집층, 완전 연결층이라고도 하며 뉴런과 입력층의 변수들이 모두 한 번씩 곱해져 가중치가 모두 생긴다. 밀집층에서는 분류하려는 클래스의 개수와 동일한 개수의 뉴런이 있어야 한다.

이때 이 신경망이 이진분류모델이므로 Signoid 함수를 사용한다. 만약 다중 분류 모델의 경우 .Softmax 함수를 사용한다.

3. 케라스 모델에서 손실 함수와 측정 지표 등을 지정하는 메서드는 무엇인가요?

A: compile 메서드

케라스의 compile() 함수는 모델을 컴파일하는 함수이다. 모델을 학습시키기 전에 compile() 함수를 사용하여 모델의 손실 함수(loss), 최적화 방법(optimizer), 평가 지표(metrics)를 설정한다.

optimizer
: 최적화 방법을 설정. 경사 하강법 등 다양한 최적화 알고리즘이 존재한다.
loss
: 손실 함수를 설정. 모델이 예측한 값과 실제 값 사이의 차이를 계산하는 함수이다.
metrics
: 평가 지표를 설정. 학습 중 모델의 성능을 평가할 때 사용.
정확도(Accuracy), 정밀도(Precision), 재현율(Recall), F1 점수 등이 있다.

4. 정수 레이블을 타겟으로 가지는 다중 분류 문제일 때 케라스 모델의 compile() 메서드에 지정할 손실 함수로 적절한 것은?

A: sparse_categorical_crossentropy

이진 분류의 경우에는 binary_crossentropy 를 사용한다.

컨디션 이슈로 과제 막차탑승^^,,, 마지막까지 잘 마무리하고 싶었는데 체력이 고갈되었는지 요 몇일 골골대며 겨우겨우 일어났다 집에 오면 기절하고 있다ㅠㅠ 그래도 얼레벌레 필수과제라도 했으니 됐다~,, 중요한건 어떻게든 끝내겠다는 나의 의지....인걸로^^!

# data[].attributes.attachment_link.title
[혼공머신]6주차_딥러닝을 시작합니다

# data[].attributes.attachment_link.description
Ch.07-1 확인문제 ​ 1. 어떤 인공 신경망의 입력 특성이 100개이고 밀집층에 있는 뉴런 개수가 10개일 때 필요한 모델 파라미터의 개수는?A: 1010개,파라미터의 개수를 구하는 방법은 입력 특성에 출력층의 뉴런 개수를 곱한 가중치에 각 뉴런이 가지는 절편 개수를 더한다.(입력특성) * (뉴런 개수) + (뉴런 개수)100 * 10 + 10 = 1010 2.

# data[].attributes.body
회고록 업로드 합니당🫶🏻 족장님과 모든 혼공학습단 여러분들 수고하셨어요🍀🍀

# data[].attributes.attachment_link.readable_text
이 전에 학교에서 '혼자 공부하는 파이썬' 이라는 책을 교재로 파이썬 수업을 들은 기억이 있다.

그전부터 한빛미디어 출판사는 나에게서 떨어질 수 없는 영원의 동반자와도 같은 책이었지만,, 혼자 공부하는 시리즈는 이 전에 봤던 책들과 달리 친근한 문장과 다양한 예시로 빠르고 정확하게 이해할 수 있는데 큰 도움을 주었던 책이었다.

그 이후로 학교를 졸업하고, 일을 시작하고 난 뒤, 다른 책들을 읽을 일이 있을까? 싶었는데 마침 6월에 혼공학습단을 모집한다는 글을 어디선가 알게 되었다. 이 기회에 예전에 배웠던 머신러닝과 딥러닝을 다시 한번 복습하면서 정확하게 이해하고 넘어가고 싶다는 마음가짐으로 달력에 모집일자를 적어두고 기다렸던 것 같다.

★ 캘박해둔 혼공학습단 모집일 ★

혼공학습단이 시작되었을 땐, 진행중이던 프로젝트가 매우 바쁜 시기였다. 집-회사-운동의 쳇바퀴에서 구르느라 정신이 없었다. 그래서 가끔 일도 바쁜데 내가 너무 무리했나?라는 생각을 했다. 그럴 때마다 그래도 어떡해! 내가 한다고 했는데! 해야지!라는 마인드가 그나마 나의 정신줄을 붙잡아 줬던 것 같다.

무엇보다 각자의 바쁜 삶 속에서 해내고 있는 많은 사람들과 매주 과제를 업로드하면 따수운 응원의 메시지를 남겨주는 혼공족장님이 있어 더 잘하려는 욕심이 뿜뿜 했다! 덕분에 우수 혼공족에도 몇 번 선정되면서 나에게 채찍과 당근을 골고루 선물해 주며 끝까지 완주할 수 있었던 것 같다.

혼공학습단에서 혼공머신을 공부할 때 나는 머신러닝과 딥러닝을 이미 한번 배운 상태였지만, 이 전엔 너무 어려운 말들과 그저 코드를 작성하기에 바빴던 것 같다. 이 상황에서 왜 이런 코드를 쓰는지, 이 메소드의 기능이 뭔지 이해해기엔 조금 벅찼고, 너무 어렵다는 편견에 다시 공부하기 두려웠던 것 같다. 이러한 나의 생각을 혼공머신 책으로 해소할 수 있었다. 세세한 설명으로 코드 한줄 한줄 이해하지 못하면 그냥 따라 적기 바빴는데, 이제는 이런 함수와 메소드를 왜 쓰는지 이해가 되니까, 다른 코드를 작성해볼 용기가 생겼다.

혼공 학습단에 참여해 처음 시작할 땐 잘해내고 싶은 마음이 컸지만, 이렇게 끝내고 보니 혼자서 잘하는 것도 힘들지만 혼자서 끝 마무리를 하는 것도 쉽지 않았고, 이 과정을 이겨낸 것만으로도 나는 참 멋지다! 대단하다! 생각했다. 혼자였지만 언제나 늘 곁에는 다른 혼공족들과 혼공족장이 있었기에 가능했던 걸 지도 모르겠다. 그래서 공부가 다시 지치고 힘들 때 언젠가 다시 또 혼공학습단을 찾을 것 같다.

# data[].attributes.attachment_link.description
이 전에 학교에서 '혼자 공부하는 파이썬' 이라는 책을 교재로 파이썬 수업을 들은 기억이 있다.그전부터 한빛미디어 출판사는 나에게서 떨어질 수 없는 영원의 동반자와도 같은 책이었지만,, 혼자 공부하는 시리즈는 이 전에 봤던 책들과 달리 친근한 문장과 다양한 예시로 빠르고 정확하게 이해할 수 있는데 큰 도움을 주었던 책이었다.그 이후로 학교를 졸업하고, 일을 시작하고 난 뒤, 다른 책들을 읽을 일이 있을까?

# data[].attributes.body
일요일에 다했다고 올렸었는데 왜 안 올려져 있었을까요 .. 오늘 확인 안 했으면 속상할 뻔 :9

# data[].attributes.body
그동안 모두 수고 많으셨습니당

# data[].attributes.body
흑흑 지각생 제출합니다

# data[].attributes.attachment_link.readable_text
기본 숙제

Ch.06-2 확인문제 1번

tcp 통신에서 seq num은 내가 보내는 송신측에서 보내는 세그먼트의 첫번째 바이트 위치.

실제로는 0부터가아니라 특정 난수로 시작됨.(중복 방지와 보안을 위해)

ack는 수신 확인을 위함과 내가 다음에 받아야 할 바이트 위치를 보내줌.

중복방지 -> 연결을 맺을 때 유한한 갯수의 포트 중에서 사용하는데 그 포트들을 사용하며

모두 0에서부터 시작하면 이전 연결에서 오는 패킷으로 인지하게 될 수도 있다.

보안-> 시퀀스 넘버를 예측해 가짜 시퀀스 번호를 만들어서 세션을 뺏기는 보안 문제 우려.

해당 raw ACK number가 해당 난수고 일반 ACK number가 해당 난수로부터 논리적으로 0부터 시작하는 ACK 번호다.

Ch.07-2 확인문제 2번

3. ServerHello

tls 1.3 핸드셰이크의 첫번째 메시지인 clienthello에서 클라이언트가 서버에 암호화 설정에 대해 보내고

그에 응답하기 위해 서버가 클라이언트에 Serverhello로 응답하며 제안받은 암호화 선택지 중 선택 항목을

알려준다.

내용정리

가용성

네트워크가 안정적이라는 것은 특정 기능을 언제든 균일한 성능으로 수행할 수 있다는 것.

정상적사용을 업타임, 그렇지 못한 시간을 다운타임 이라고 하면

가용성 = 업타임/(업타임+다운타임) 이라고 할 수 잇다.

안정적으로 평가받기 위해선 99.999%의 가용성을 가진 파이브나인스를 목표로 한다.

이중화

DB나 웹서버 프로그램처럼 문제발생시 시스템 전체 다운의 우려가 있는 대상(단일장애점)의

문제 발생을 대비해 가용성을 높이기위해 이중화를 하는 것이 좋다.

백업 대기를해놓는 액티브/스탠바이둘 모두를 가동상태로 두는 액티브/액티브

로드밸런싱

서버를 다중화했을 때 트래픽을 고르게 분배하는 기술

RR방식과 최소 연결 알고리즘등을 사용하고 서버의 상황에 따라 가중치를 준다.

프록시

일반적으로 메세지를 주고받는 대상인 서버는 오리진 서버 라고 하고

클라이언트와 오리진서버 사이에는 많은 서버가 존재한다.

그에엑

멀쩡해지고 보충작성하기..

# data[].attributes.attachment_link.description
기본 숙제Ch.06-2 확인문제 1번 tcp 통신에서 seq num은 내가 보내는 송신측에서 보내는 세그먼트의 첫번째 바이트 위치.실제로는 0부터가아니라 특정 난수로 시작됨.(중복 방지와 보안을 위해)ack는 수신 확인을 위함과 내가 다음에 받아야 할 바이트 위치를 보내줌.

# data[].attributes.body
[혼공머신] _ 회고록 - https://luxmeily.tistory.com/m/16

6주차 공부후에 회고록을 이미 적어버려서 그 상태로 구글폼 작성했었는데 다시 작성해서 올리겠습니다 !

그동안 감사했습니다 🙇‍♀️

# data[].attributes.body
[혼공머신]_6주차 딥러닝 - https://luxmeily.tistory.com/m/15

족장님 덕분에 6주차까지 달려올 수 있었던 것 같습니다 !

그동안 정말 감사했습니다 🙇‍♀️

기회가 된다면, 다음에도 혼공단에 또 참여할 수 있으면 좋겠습니다 !🍀🩵

# data[].attributes.body
다들 고생 많으셨습니다!!

# data[].attributes.attachment_link.provider_name
라일라엘의 개발 블로그

# data[].attributes.attachment_link.readable_text
비전공자에 학원출신이라는 배경이 취업을 준비하는 과정에서 발목을 많이 잡았습니다.

면접 때 '전공자 보다 네가 뭐가 낫냐'라는 이야기까지 들었습니다.

취업을 하고 나서 시간이 좀 흐르자 회사가 그토록 왜 전공자를 찾는지 알게 되었습니다. 제가 모르는 지식을 당연하듯 알고 있었고, 심지어 그런 지식을 '기본기'라고 칭하더군요

처음엔 전공자와의 격차를 줄여야겠다는 생각뿐이었습니다. 처음으로 공부한 게 컴퓨터 구조와 운영체제였는데, 어려우면서도 신기했고 즐거웠습니다. 이때 혼공 9기로 참여했었는데 다른 사람들과 함께 공부하는 느낌이 드는 시스템이 너무 마음에 들었습니다.

시간이 조금 흐르고 서버에게 패킷을 주고받는 업무를 하다가 문득 '내부적으로 어떻게 동작할까?'라는 궁금증이 생겼습니다. 궁금증을 해소하기엔 계기가 부족해서 미루고 미루다 '혼자 공부하는 네트워크'라는 책이 출간되었다는 소식을 듣고 '조만간 혼공 학습단이 열리면 신청해야겠다'는 생각으로 기다리다가 이번 12기에 참여하였습니다.

혼공 학습단 9기에 참여할 땐 조급함으로 공부를 했기 때문에 어서 빨리 정리해야 한다는 생각뿐이었습니다. 하지만 지금은 여유 있게 '그게 그거였구나!' 하는 소소한 감동을 받으며 즐겁게 공부를 했고, 6주간의 시간이 흘러서 벌써 마무리를 하고 회고록을 적고 있게 되었네요.

6주라는 기간이 무언가를 학습하기엔 짧다는 생각이 있었는데, 이번 네트워크 공부를 하면서 그렇지 않다는 것을 알게 되었습니다. 네트워크를 학습하는 과정에서 회사에 새 PC가 세팅되어서 원격으로 접속해야 했었는데 연결에 문제가 발생했었습니다. 시설 관리팀장님께서 '어떤 것들이 문제였고, 어떻게 해서 해결했으니 지금은 사용해도 된다'라는 히스토리를 설명해 주셨는데, 놀랍게도 불과 며칠 전에 배웠던 내용이어서 내용이 잘 이해가 되었습니다.

또 서버에 로그인을 요청하는 패킷을 보냈는데 '유효하지 않은 세션' 에러가 발생했었습니다. 서버 팀장님에게 여쭈어보면서 해결을 했었는데, '도대체 세션이 뭐지?'라는 의문이 들었습니다. 그리고 얼마 지나지 않아 세션에 대해서 학습을 했습니다.

그 짧은 6주 동안 학습한 내용을 잘 써먹은 사례와 에러의 원인을 이해하게 된 사례가 생겨서 '공부하길 잘했다'라는 생각이 절로 들었습니다.

이번 혼공 학습단을 계기로 6주 전의 나 자신보다 훨씬 많이 성장했음을 느꼈습니다. 이 성취감을 이어서 또 다른 공부거리를 찾아다녀야겠네요.

다들 고생 많았습니다!

# data[].attributes.attachment_link.title
[혼자 공부하는 네트워크] 혼공 12기 회고록

# data[].attributes.attachment_link.description
비전공자에 학원출신이라는 배경이 취업을 준비하는 과정에서 발목을 많이 잡았습니다.면접 때 '전공자 보다 네가 뭐가 낫냐'라는 이야기까지 들었습니다. 취업을 하고 나서 시간이 좀 흐르자 회사가 그토록 왜 전공자를 찾는지 알게 되었습니다. 제가 모르는 지식을 당연하듯 알고 있었고, 심지어 그런 지식을 '기본기'라고 칭하더군요 처음엔 전공자와의 격차를 줄여야겠다는 생각뿐이었습니다.

# data[].attributes.body
대지각..! 흑흑 퇴근하고 쭉 적다가 이제야 마무리 했습니다! 뭐든 마무리가 중요한데 지각으로 마무리한게 넘 아쉽네요 ㅜㅜ 그동안 고생 많으셨습니닷!

# data[].attributes.attachment_link.readable_text
https://lailael-dev.tistory.com/entry/혼자-공부하는-네트워크-Chapter-6-실습으로-복습하는-네트워크 https://lailael-dev.tistory.com/entry/혼자-공부하는-네트워크-Chapter-7-1-안정성을-위한-기술 https://lailael-dev.tistory.com/entry/혼자-공부하는-네트워크-Chapter-7-2-안전성을-위한-기술 https://lailael-dev.tistory.com/entry/혼자-공부하는-네트워크-Chapter-7-3-무선-네트워크
Ch.06(06-2) 확인 문제 1번(p.379), (07-2) 확인 문제 2번(p.407) 풀고 설명하기

문제 : 다음은 호스트 A와 B간의 쓰리 웨이 핸드 셰이크 과정에서 호스트 A가 호스트 B에게 전송한 첫 번째 SYN 세그먼트의 일부 입니다. 쓰리 웨이 핸드 셰이크상에서 호스트 B가 호스트 A에게 전송할 다음 세그먼트의 Acknowledgment number(raw)는 무엇일까요?

정답 : 3588415413

설명

전달받은 Sequence Number에서 1을 더한 값을 사용하기 때문이다.

문제 : 다음 그림은 두 호스트가 TLS 1.3 핸드셰이크를 수행하는 과정을 나타낸 그림 일부이다. 괄호 안에 들어갈 TLS 관련 메시지로 알맞은 말을 골라보자.

정답 : ServerHello

설명

ClientHello에 암호화 통신을 위한 각종 선택지가 전달되고, 서버가 선택한 정보를 되돌려줘야 한다. 이때 보내는 메시지가 ServerHello이다.

# data[].attributes.body
모두 수고하셨습니다~!!! 여러분들 덕분에 책 한권 가뿐히 읽고 배웠어요 ^_^ 모두 좋은일들만 가득가득 하세용 🤗🤗

# data[].attributes.body
지각을 하다.

그치만 제출했자나~~

# data[].attributes.attachment_link.title
[혼공프로]6주차_끝은 새로운 시작이다 - ̗.. : 네이버블로그

# data[].attributes.body
혼공족장님 감사합니다!!🩵💙

# data[].attributes.attachment_link.readable_text
6월 중순, 인공지능 관련 업무를 하게 되었다.
여기저기서 인공지능이란 말만 들어봤지 아는게 하나도 없는데 말이다...
막막해하고 있을 때, 이 책을 추천받았다.
"혼자 공부하는 머신러닝+딥러닝"
제목에서부터 알 수 있듯이 혼자 공부할 수 있게 만들어진 책이며, 무료강의도 제공해준다는 점이 마음에 들었다.
그리고 혼공학습단을 신청했다.

사실,,,
혼공학습단 참여를 망설였다.
처음엔 6주(여름방학까지 7주)라는 시간이 너무 길게 느껴졌고, 꾸준히 할 수 있을까 하는 부담감 때문이었다.
마지막까지 완주 못한다고 큰일나는 건 아니지만, 뭔가 끝까지 미션을 클리어하고 싶은 마음이랄까..😁
그래도 이런 게 없다면, 자기 합리화하면서 자꾸 미루고 안할까봐 "우선 해보자!" 라는 마음으로 참여했다.

역시 퇴근 후 공부하기란 쉽지 않았다. 1주차때부터 위기였으니..😅

하지만,

이 모든 것들이 나를 끝까지 멱살잡고 완주까지 하게 해줬다.
아마 혼공학습단 참여를 안했다면, 내 예상대로 "아 그냥 내일하자" 하면서 매일 미뤘겠지...ㅎ

혼공학습단에 이어 공부하면서 느낀점을 말하자면!
먼저 직접 코딩을 따라하면서 공부하니까 집중이 잘 됐고, 중간중간 나오는 손그림(?) 덕분에 내용을 이해하는 데 많은 도움이 됐다.

잘 따라하나 싶다가도 혼자 오류메시지 뜨고 당황했다가,
그래도 코드 하나하나보면서 해결해나가면서 재밌게 공부했다.
물론, 잘 이해안가고 어려운 부분도 있어서 완벽하게 마스터했다고 말하긴 어렵지만,,😭

머신러닝의 기본적인 개념
훈련세트와 테스트세트, 검증세트 나누기
과소적합, 과대적합
교차검증과 여러 알고리즘들
등등..

아무것도 모르던 전과 달리, 머신러닝의 기본 개념을 공부하고나니 조금 더 업무이해도가 올라간 느낌이 든다. 이 점이 너무 뿌듯하다.
원하던 목적 달성!!

같이 참여한 사람들을 보며, 많은 혼공족들이 이 시리즈의 책과 혼공학습단을 통해 원하는 목적을 이루고 있는 것 같다는 생각이 들었다.
이런 좋은 프로그램을 운영해주셔서 감사합니다 족장님😆
(족장님이 응원해주시고 잘 했다 격려해주시고, 간식주셔서 중간에 몇번 포기할뻔 한거 성공했습니다 ㅎㅎㅎㅎ)

# data[].attributes.attachment_link.description
6월 중순, 인공지능 관련 업무를 하게 되었다.여기저기서 인공지능이란 말만 들어봤지 아는게 하나도 없는데 말이다...막막해하고 있을 때, 이 책을 추천받았다. "혼자 공부하는 머신러닝+딥러닝"제목에서부터 알 수 있듯이 혼자 공부할 수 있게 만들어진 책이며, 무료강의도

# data[].attributes.body
늦었지만 마지막 6주차 제출합니다!

# data[].attributes.body
끝!

# data[].attributes.attachment_link.readable_text
인공 신경망

인공신경망은 머신러닝의 한 종류이다. 가장 단순한 인공 신경망의 형태는 로지스틱 회귀 분석과 동일하다. 인공신경망은 입력층, 밀집층, 출력층으로 구성되어 있다. 인공 신경망은 주로 텐서플로우(케라스)와 파이토치 라는 라이브러리로 실행시키는데, 이 책에서는 텐서플로우를 이용한다. 기초적인 인공신경망에서 인공신경망의 구조를 잘 파악해서 나중에 어려운 인공신경망을 만들 때 이용하면 좋을 것 같다.

과제

7-1 확인 문제 풀고, 풀이 과정 정리하기
1) 어떤 인공 신경망의 입력 특성이 100갱이고 밀집층에 있는 뉴런 개수가 10개일 때 필요한 모델 파라미터의 개수는 몇 개인가요?
A: 1000개

2) 케라스의 Dense 클래스를 사용해 신경망의 출력층을 만들려고 합니다. 이 신경망이 이진 분류 모델이라면 activation 매개변수에 어떤 활성화 함수를 지정해야 하나요?
A: 'sigmoid'

3) 케라스 모델에서 손실함수와 측정 지표등을 지정하는 메서드는 무엇인가요?
A: compile()

4) 정수 레이블을 타깃으로 가지는 다중 분류 문제일 때 케라스 모델의 compile() 메서드에 지정할 손실 함수로 적절한 것은?
A: 'sparse_categorical_crossentropy'

# data[].attributes.attachment_link.title
[혼공머신] 6주차_딥러닝을 시작합니다

# data[].attributes.attachment_link.description
인공신경망은 머신러닝의 한 종류이다. 가장 단순한 인공 신경망의 형태는 로지스틱 회귀 분석과 동일하다. 인공신경망은 입력층, 밀집층, 출력층으로 구성되어 있다. 인공 신경망은 주로 텐서플로우(케라스)와 파이토치 라는 라이브러리로 실행시키는데, 이 책에서는 텐서플로우를

# data[].attributes.body
회고록 제출합니다~~~ 모두 수고하셨습니다💚 12기에 참여하게 되어 감사했습니다. 남은 여름도 잘 보내세요!!

# data[].attributes.attachment_link.readable_text
혼공스 드디어 끝이 나다...!

혼공스가 드디어 6주 차, 방학을 포함한 7주의 과정이 끝이 났습니다.

처음 혼공스 초대장을 받았을 때에 걱정이 많았습니다. 왜냐하면 저는 스터디를 한 번도 해보지 않았고, 책을 끝까지 읽는데 시간이 오래 걸리는 편이었기 때문입니다.

그런 저에게 더더욱 잘 맞는 스터디가 아니었을까 싶었는데요.
스터디를 한 번도 하지 않았어도 룰이 간단하였고 벌칙도 없어서 부담없이 열심히 커리큘럼을 따라가면 됩니다!

'혼공스'라는 이름에 걸맞게 내가 선택한 '혼자 공부하는 시리즈' 도서를 꼼꼼히 정독하고 나만의 방식으로 내용을 정리하면 됩니다.

개발책이 대체로 두껍기도 하고 전자책에 익숙해지고 싶어서 이번 기회에 이북으로 구매하였습니다.

+) 저는 매체 중에서 강의보다는 책이 제일 머리속에 정리가 잘 되는 느낌이라 좋았습니다. (강의를 봐도 결국엔 책까지 읽어야 하는 성향.....)

처음에는 운영체제를 언젠가는 꼭 공부해야 한다고 생각했지만, 미루고 미루다가... 서점에서 책만 째려보다가... 이번 기회로 감사하게 스터디에 참여할 수 있었습니다.

역시 스스로 하는 것보다는 글을 읽어주시는 혼공족장님의 응원, 같이 하는 혼공단분들이 있으니까 제출을 늦게 하더라도 정독해서 글을 올리게 되더라구요.

지각을 너무 많이 해서 부끄러운데...😭 그래도 최대한 정독하려고 했더니 기억에 잘 남더라구요.

책 후기

처음에는 운영체제가 더 어려울 것 같았는데 개인적으로 컴퓨터 구조가 조금 더 생소해서 어려웠습니다. 미세한 부품은 뭔가 상상이 잘 안됐달까요...ㅎ
하지만 전반적으로 자세한 설명과 그림자료 덕에 이해하지 못하고 넘어간 부분은 없었던 것 같아요. 그림 그려가면서 다시 복습해보려고 합니다.
이전과 달라진 점이 있다면, 회사분들과 대화를 나눌때도 이전보다 훨씬 더 많은 용어들을 알고 있으니 이해도 쉬웠고 문제파악도 수월해져서 좋았습니다. 이젠 아는 척(...)이 아니고 진짜 알고 이야기할 수 있으니까요,, 하핫,,
컴퓨터 구조와 운영체제를 모르는 분이 있다면 꼭 이 책으로 입문해 보셨으면 좋겠습니다.

마무리

개발자면서 회고도 처음 썼다는 사실이 조금 부끄럽지만... 부끄러움이 새로운 배움으로 이어진다고 생각하며...!!!
앞으로 공부한 것들을 조금씩이라도 쓰고, 꾸준히 공부근육을 키워가도록 노력해보려고 합니다.
다음 혼공스에 또 초대장을 받을 수 있다면...!(열심히 할게요 으아아아!!!!) 지인분에게 추천 받은 '혼자 공부하는 머신러닝+딥러닝' 또는 혼공족장님의 추천 '혼자 공부하는 네트워크'에 지원해보려고 합니다.

끝까지 완주한 혼공단분들과 혼공족장님 모두 수고많으셨습니다!!!👏

# data[].attributes.attachment_link.title
[혼공컴운] 혼공스 12기 회고 📕

# data[].attributes.attachment_link.description
혼공스 드디어 끝이 나다...!혼공스가 드디어 6주 차, 방학을 포함한 7주의 과정이 끝이 났습니다.처음 혼공스 초대장을 받았을 때에 걱정이 많았습니다. 왜냐하면 저는 스터디를 한 번도 해보지 않았고, 책을 끝까지 읽는데 시간이 오래 걸리는 편이었기 때문입니다. 그런 저에게 더더욱 잘 맞는 스터디가 아니었을까 싶었는데요. 스터디를 한 번도 하지 않았어도 룰이 간단하였고 벌칙도 없어서 부담없이 열심히 커리큘럼을 따라가면 됩니다!

# data[].attributes.body
12기 동기분들과 족장님 모두 수고 하셨습니다~!

# data[].attributes.attachment_link.provider_name
네이버 블로그 | ymd81님의 블로그

# data[].attributes.attachment_link.readable_text
저마다의 속도에 맞춰서 조금씩 앞으로 나아가고 있는 모습을 보면서, 저 또한 무사히 6주차까지 완주하게 되었습니다. 중간에 코로나로 인한 고비가 찾아 왔지만, 무사히 잘 견뎌낸 제 자신을 칭찬합니다. ㅎㅎ

누군가 혼공학습단의 매력을 말해보라고 한다면, 다음과 같은 요소들을 말하고 싶습니다.

특히 다양한 과목의 사람들 노트를 일일이 정독하면서 코멘트를 남겨주신 혼공족장님께 진심으로 감사드립니다.

'끝은 또다른 시작'이라는 다소 진부한 이야기로 끝 맺음을 하고자 합니다.

마치 알고리즘의 늪에서 헤어나올 수 없는 것처럼, 배움에는 끝이 없다는 사실을 깨닫는 요즘입니다.

# data[].attributes.attachment_link.title
[혼공머신] 혼공학습단 12기 회고

# data[].attributes.attachment_link.description
지난 2월 혼공학습단을 신청해서 혼공분석을 마치고, 6개월만에 다시 혼공머신으로 글을 쓰게 되었습니다. ...

# data[].attributes.body
모두 고생하셨습니다~ 앞으로도 화이팅!

# data[].attributes.body
[혼공자] 7주차_스레드,컬렉션 프레임워크, 입출력 스트림

6주 학습 후에 교재에 뒤에 남은 Chapter 12, 13, 14 부분까지 학습을 마무리했습니다.

# data[].attributes.attachment_link.title
자바 스레드, 컬렉션 프레임워크, 입출력 스트림 완벽 가이드

# data[].attributes.attachment_link.description
이 블로그 글에서는 자바의 멀티 스레드, 컬렉션 프레임워크, 입출력 스트림을 자세히 설명합니다. 스레드 생성 및 제어, 다양한 컬렉션의 사용법, 효율적인 입출력 방법을 통해 자바 프로그래밍 실력을 향상시킬 수 있는 정보를 제공합니다.

# data[].attributes.body
비록 지각을 했지만, 6주 완주 성공적!

혼공족들도 족장님도, 다들 고생많이 하셨어요.

# data[].attributes.attachment_link.readable_text
와이어샤크는 대중적인 패킷 캡쳐 프로그램
패킷 캡쳐 프로그램은 네트워크에서 송수신되는 패킷을 모니터링하고 분석할 수 있는 프로그램

와이어샤크를 통해 패킷을 캡처하고, 필터를 이용해 캡처한 패킷을 필터링할 수 있다.

와이어샤크를 사용해서 IP, ICMP, UDP, TCP, HTTP 프로토콜의 패킷을 분석할 수 있다.

이중화, 다중화 : 안정성을 높이기 위한 방법으로 물리적 장비나 프로그램 등을 여러 개 두는 기술

로드 밸런싱 : 트래픽을 고르게 분산하는 기술

가용성

안정성은 , ' 특정 기능을 언제든 균일한 성능으로 수행할 수 있는 특성'을 의미한다.

안정적인 웹 서버 : 언제든지 응답 메시지를 제공할 수 있는 서버

안정적인 라우터 : 언제든 지 라우팅 기능을 제공할 수 있는 라우터

가용성이란 '컴퓨터 시스템이 특정 기능의 정상적인 사용이 가능한 시간의 비율'이다.

안정적인 시스템은 가용성이 높다.

정상적인 사용 시간을 업타임, 정상적인 사용이 불가능한 시간을 다운타임으로 정의할 때 수식으로 나타내면 아래와 같다. 가용성을 높이려면 다운타임을 낮춰야한다.

결함 감내 (fault tolerance) : 문제가 발생하더라도 가능할 수 있는 능력

다운타임을 낮추고 가용성을 높이기 위해서는 결함을 감내할 수 있도록 서비스나 인프라를 설계하는 것이 중요하다.

이중화 / 다중화

결함을 감내하여 가용성을 높이기 위한 가장 기본적이고 대표적인 방법으로, '예비(백업)를 마련하는 방법'이다.

이중화 : 무언가를 이중으로 두는 기술

다중화 : 무언가를 여러 개 두는 기술, 이중화된 구성에 비해 더욱 안정적인 운영이 가능하다.

단일 장애점(SPoF: Single Point OF Failure)

이중화 및 다중화를 할 수 있는 대상들은 대부분 '문제가 발생할 경우 시스템 전체가 중단 될 수 있는 대상' 이다.

서버 컴퓨터, 네트워크 인터페이스(NIC), 스위치와 같은 물리적 장비, 데이터 베이스 웹 서버 프로그램 등

SPOF는 최대한 없애는 것이 좋다. 이중화/다중화를 통해 SPOF를 없애 가용성을 높일 수 있다.

이중화 구성 : 액티브/스탠바이, 액티브/액티브

액티브/스탠바이

액티브 상태인 시스템에 문제가 발생할 경우 스탠바이 시스템이 자동으로 액티브 시스템을 대신하여 동작 ⇒ 페일오버(failover)

두 장비가 동시에 가동되지 않고 한 번에 하나만 가동

액티브/액티브

두 시스템 모두를 가동 상태를 두는 구성 방식

부하를 분산시킬 수 있고, 두 시스템이 함께 가동되므로 성능상 이점

한 시스템에서 문제가 발생하면 순간적으로 다른 시스템에 부하가 급증할 수 있다.

로드 밸런싱

고가용성을 요구하는 호스트는 클라이언트보다는 일반적으로 서버이다.

서버를 다중화 했더라도 트래픽 분배가 필요하다.

트래픽(trafic) : '주어진 시점에 네트워크를 경유한 데이터의 양'
일반적으로 트래픽 측정은 노드에서 이루어지므로 일반적으로 '주어진 시점에 특정 노트를 경유한 패킷의 양'이라 할 수 있다.

서버에 과도 한 트래픽이 몰리면 서버의 가용성을 떨어뜨리게 된다.

특정 서버에만 트래픽을 몰릴 경우 가용성을 떨어뜨리게 된다. 서버를 다중화 했더라도 트래픽을 고르게 분산해야 가용성이 높아진다.

로드 밸런싱은 로드 밸런서를 통해 부하(트래픽)를 분산하는 방법

라운드 로빈 알고리즘 : 서버를 돌아가며 부하전달

최소 연결 알고리즘 : 연결이 적은 서버부터 우선적으로 부하 전달

해시 : 무작위로 고르기

암호와 인증서

암호화 : 원문 데이터를 알아 볼 수 없는 형태로 변경하는 것

복호화 : 암호화된 데이터를 원문 데이터로 되돌리는 것

대칭 키 암호화 방식과 공개 키 암호화 방식

대칭 키 암호화 방식

메시지를 암호화할 때사용 하는 키와 복호화할 때 사용하는 키가 동일

적은 부하 덕분에 암호화 및 복호화를 빠르게 수행할 수 있다.

공개 키 암호화 방식

암호화와 복호화 시 서로 다른 키를 쓰는 암호화 방식

한 키로 암호화 했다면 다른 키로 복호화 할 수 있다.

각각 공개 키와 개인 키라 부른다.

암호화 및 복호화에 시간과 부하가 상대적으로 많이 드는 편

키를 안전하게 공유 할 수 있다.

세션키

대칭 키 암호화 방식과 공개 키 암호화 방식을 결합

공개 키로 대칭키를 암호화하고, 개인 키로 암호화된 대칭 키를 복호화 한다.

인증서와 디지털 서명

공개 키 인증서(public key certificate)

공개 키의 유효성을 입증하기 위한 전자 문서
전달 받은 공개키가 정말 신뢰할 수있는지, 조작되지 않았는지 확신

공개 키 뿐만아니라, 누가 생성, 조작 여부, 유효 기간 등을 포함한 인증서

CA라는 인증서 발급 기관을 통해 인증서를 검증할 수 있다.

디지털 서명
개인 키로 암호화된 메시지를 공개 키로 복호화함으로써 신원을 증명하는 절차

HTTPS : SSL과 TLS

SSL과 TLS는 인증과 암호화를 가능하게 하는 프로토콜

TLS는 SSL을 계승한 프로토콜

SSL/TLS를 사용하는 가장 대표적인 프로토콜은 HTTPS

1. TCP 쓰리 웨이 핸드세이크 : TCP 연결을 수립하기 위해 두 호수트가 SYN, SYN+ACK, ACK 플래그가 설정된 TCP 세그먼트를 주고 받음

2. TLS 핸드세이크 : 암호화에 사용할 키와 인증서 송수신 및 검증이 이루어짐

3. 암호화된 메시지 송수신

ClientHello 메시지 : 암호화 이전에 맞춰 봐야 할 정보들을 제시하는 메시지

ServerHello 메시지 : 제시된 정보들을 선택하는 메시지

TLS 버전, 암호 스위트 등의 정보

암호 스위트 : 사용 가능한 암호화 방식과 해시함수를 담은 정보

키를 만들기 위해 사용한 서버의 난수

Certificate 메시지, CertificateVerify 메시지 : 각각 인증서와 검증을 위한 디지털 서명
클라이언트는 이 메시지를 토대로 서버의 공개 키를 검증한다.

Finished 메시지 : TLS 핸드세이크 종료, TSL 핸드세이크를 통해 얻어낸 키를 기반으로 암호화된 데이터 주고받으면 된다.

Application Data : Finished 메시지와 함께 암호화된 메시지를 전송할 수 있다.

전파와 주파수

정보는 전파를 통해 무선으로 전달될 수 있고, 전파 통신을 위한 주파수 대역은 정해져 있다. (3kHz~ 3THz 사이의 진동수를 갖는 전자기파)

와이파이와 802.11

IEEE 802.11은 무선 LAN의 표준 규격이고, 와이파이는 특정 IEEE 802.11 규격을 준수하는 기술이다.

IEEE 802.11 표준은 대부분 2.4GHz, 5GHz 대역을 사용한다.
주파수의 회정설 떄문에, 장애물이 많다면 2.4GHz가 유용, 장애물이 적은 상황에서 속도가 필요하다면 5GHz

무선 통신에서의 채널 : 무선 네트워크에서 사용될 특정 주파수 대역을 나타내며, 채널 번호로 구분된다.

AP와 서비스 셋

무선 네트워크를 생성하기 위해서는 '무선 액세스 포인트(AP)라는 네트워크 장비 필요

무선 엑세스 포인트(AP) : 무선 통신 기기들을 연결하여 무선 네트워크를 구성하는장치 (가정의 무선 공유기)

무선 LAN에서 통신을 중개하는 역할 수행

서비스셋 : 무선 네트워크를 이루는 AP와 여러 장치들의 집합, 같은 서비스 셋에 속한 장비들은 같은 무선 네트워크에 속한다.

서비스셋 식별자(SSID) : 각기 다른 무선 네트워크를 구분짓는 수단 이자 무선 네트워크를 지칭하는 고유한 이름, 와이파이 이름

비컨 프레임 : AP가 자신의 존재를 알리기 위해 브로드캐스트하는 메시지, AP가 자신의 존재를 알리지 않으면 호스트는 연결 가능한 무선 네트워크 존재를 모른다.

진도: Chapter 06~07

기본 숙제(필수): Ch.06(06-2) 확인 문제 1번(p.379), (07-2) 확인 문제 2번(p.407) 풀고 설명하기

추가 숙제(선택): 와이어샤크에서 실제 TCP/UDP 패킷 확인해 보기

기본 숙제

Ch.06(06-2) 확인 문제 1번(p.379)

3588415413

순서번호(Sequence Number raw)는 3588415412

다음으로 받기를 희망하는 다음 Acknowledgment number(raw)는 그에 1을 더한 3588415413이다.

Ch.07(07-2) 확인 문제 2번(p.407)

3 ) ServerHello

ClientHello에 대한 응답으로 ServerHello를 응답한다.

ClientHello 메시지 : 암호화 이전에 맞춰 봐야 할 정보들을 제시

ServerHello 메시지 : 제시된 정보들을 선택하는 메시지

추가 숙제

와이어샤크에서 실제 TCP/UDP 패킷 확인해 보기

추가 숙제(선택): 와이어샤크에서 실제 TCP/UDP 패킷 확인해 보기

- TCP 연결 수립 : 깃허브에 접근했다.

1. SYN : 첫 번째 패킷 (클라이언트 ⇒ 깃허브)

클라이언트가 서버(깃허브)에 연결을 요청하기 위해 SYN 패킷을 보낸다.

깃허브는 https 이기 때문에 포트번호는 443

상대적 순서번호 : 0

실제 순서번호 : 2972615756

2. SYN + ACK (깃허브 ⇒ 클라이언트)

서버(깃허브)는 클라이언트의 요청을 수락하기 위해 SYN과 ACK 플래그가 설정된 패킷을 보낸다.

상대적 순서번호 : 1

실제 순서번호 : 3851970539

확인 응답 번호 : 첫 번째 패킷의 순서번호(2972615756) + 1 === 2972615757

Flags : 두 번째 세그먼트는 SYN 비트와 ACK 비트가 1로 설정된 세그먼트

3. ACK (클라이언트 ⇒ 깃허브)

클라이언트는 서버의 SYN + ACK 패킷에 대한 확인 응답(ACK)을 보낸다.

확인 응답 번호 : 두 번째 패킷의 순서번호(3851970539) + 1 === 3851970540

이로써 TCP 연결이 수립됩니다.

- TCP 연결 종료 : 내가 깃허브 창을 껐을 때

1. FIN, ACK (깃허브 ⇒ 클라이언트)

서버가 연결을 종료하려고 할 때 FIN과 ACK 플래그가 설정된 패킷을 보낸다.

이 패킷은 서버가 연결을 종료하기 위한 요청

2. ACK (클라이언트 ⇒ 깃허브)

클라이언트는 서버의 FIN 패킷에 대해 확인 응답(ACK)을 보낸다.

이로써 서버 측의 연결 종료가 확인된다.

3. FIN, ACK (클라이언트 ⇒ 깃허브)

서버는 클라이언트의 FIN 패킷에 대해 마지막 ACK를 보낸다.

이로써 클라이언트 측과 서버 측 모두 연결이 완전히 종료된다.

회고

과제에 와이어샤크를 이용해서 TCP/UDP 확인하기가 있어서 더 자세하게 볼 수 있는 계기가 됐다.
URL에 주소를 치면 어떤 일이 일어날까요? 라는 질문에서 3핸드세이크 대답이 있을때 그냥 간단히 넘어갔는데 6주가 지나고서는 머리속에 이 과정이 그려진다는게 재밌다.

# data[].attributes.attachment_link.title
[혼공네트] 6주차_안정성을 위한 기술

# data[].attributes.attachment_link.description
와이어샤크, 이중화/다중화, 로드밸런싱, 암호와 인증서, HTTPS, 무선네트워크

# data[].attributes.body
힘들었어요 ㅋㅋㅋㅋ

그래도 혼공단 해서 참 다행이고, 잘 했다는 생각이 듭니다. 이끌어주셔서 감사합니다~!!

# data[].attributes.attachment_link.readable_text
Chapter 14 ~ 15

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

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

14-1 연속 메모리 할당

프로세스에 연속적인 메모리 공간을 할당하는 방식

스와핑(swapping)

메모리에서 사용되지 않는 일부 프로세스를 보조기억장치로 내보내고 실행할 프로세스를 메모리로 들여보내는 메모리 관리 기법

스왑 영역(swap space): 프로세스들이 쫓겨나는 보조 기억장치의 일부 영역

swap-out: 현재 실행되지 않는 프로세스가 메모리에서 스왑 영역으로 옮겨지는 것

swap-in: 스왑 영역에 있던 프로세스가 다시 메모리에 옮겨오는 것. 스왑 아웃 되었던 프로세스가 다시 스왑 인 될 때, 전의 물리 주소와 다른 주소에 적재될 수 있다.

스와핑을 이용해 프로세스들이 요구하는 메모리 주소 공간의 크기가 실제 메모리 크기보다 큰 경우에도 프로세스들 동시 실행 가능

스왑 영역 확인하기

메모리 할당

1. 최초 적합(first fit): 프로세스가 적재될 수 있는 공간을 발견하는 즉시 메모리를 할당하는 방식. 검색 최소화/ 빠른 할당

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

3. 최악 접학(worst fit): 프로세스가 적재될 수 잇는 가장 큰 공간에 프로세스를 배치하는 방식

연속 메모리 할당의 문제 1. 외부 단편화

연속 메모리 할당은 문제가 있다. 어떤? -> 외부 단편화(external fragmentation)

프로세스들이 실행되고 종료되기를 반복하며 메모리 사이에 빈 공간이 생긴다. 프로세스를 새로 할당하기 어려운 작은 메모리 공간들 때문에, 메모리 낭비 현상이 발생한다.

해결방안
압축(compaction): 메모 조각 모음. 흩어져 있는 빈 공간들을 하나로 모음. 하나의 큰 빈 공간으로 만든다. -> [문제점] 시스템이 하던 일을 중지해야 함. 메모리의 내용을 옮기는 과정 중에 오버 헤드 야기.### 페이징에서의 주소 변환

연속 메모리 할당의 문제 2.

물리 메모리보다 큰 프로세스를 실행할 수 없다.
(스와핑을 통해 실제 메모리보다 큰 여러 프로세스를 실행하는 것과 다른 부분)

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

가상 메모리(virtual memory): 실행하고자 하는 프로그램을 일부만 메모리에 적재하여 실제 물리 메모리 크기보다 더 큰 프로세스를 실행할 수 있게 하는 기술

이걸 가능하게 하는 것이 페이징과 세그멘테이션이다.

페이징이란

paging

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

페이지 아웃: 페이징 시스템에서의 스왑 아웃

페이지 인: 페이징 시스템에서의 스왑 인

페이지 테이블

출처: wiki

페이지 번호와 프레임 번호를 짝지어 주는 일종의 이정표

물리 주소상 프로세스들이 분산되어 있더라도, CPU 입장에서 논리 주소는 연속적으로 보일 수 있다.

PRBR(Page Table Base Register): 페이지 테이블 베이스 레지스터, 각 프로세스의 페이지 테이블이 적재된 주소를 가리키고 있는 레지스터

TLB(Translation Lookaside Buffer)

페이지 테이블을 메모리에 두면, 보기 위해/ 알게 된 프레임 접근을 위한 접근 시간이 2배 이상 증가하는 문제점이 있다. 이를 해결하기 위해 TLB

페이지 테이블의 캐시 메모리

TLB hit: cpu가 발생한 논리 주소에 대한 페이지 번호가 TLB에 있을 경우

TLB miss: 페이지 번호가 TLB에 없어서 메모리 내 페이지 테이블에 접근하는 경우

페이징에서의 주소 변환

논리 주소 그림

페이지 번호: 접근하고자 하는 페이지 번호

변위: 접근하려는 주소가 프레임의 시작 번지로부터 얼만큼 떨어져 있는지 알기 위한 정보

페이지 테이블 엔트리(PTE: Page Table Entry)

유효 비트(valid bit): 현재 해당 페이지에 접근 가능한 지 여부를 알려준다.

보호 비트(protection bit): 페이지 보호 기능을 위해 존재하는 비트

해당 페이지가 읽고 쓰기가 가능한 페이지인지 나타낼 수 있다.

읽기만 가능 0, 읽고 쓰기 가능하면 1

예컨대, 보호 비트가 100이면 읽기만 가능, 111이면 읽고 쓰고 실행 가능

참조 비트(reference bit): CPU가 이 페이지에 접근한 적이 있는 지 여부를 나타낸다.

적재 이후 사용했으면 1, 한 번도 사용한 적 없으면 0

수정 비트(modified bit): 해당 페이지에 데이터를 쓴 적이 있는지 없는지 수정 여부

😯 그림을 봐도 잘 모르겠어요 ㅋㅋ

계층적 페이징

계층적 페이지(hierarchical paging): 페이지 테이블을 페이징하여 여러 단계의 페이지를 두는 방식, 다단계 페이지 테이블(multilevel page table) 기법이라고도 부름

계층적 페이지 논리 주소

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

요구 페이징(demand paging)

프로세스를 메모리에 적재할 때 처음부터 모든 페이지를 적재하지 않고 필요한 페이지만을 메모리에 적재하는 기법
1) cpu가 특정 페이지에 접근하는 명령어를 실행
2) 해당 페이지가 현재 메모리에 있다면(유효 비트 1) cpu는 페이지가 적재된 프레임에 접근
3) 해당 페이지가 현재 메모리에 없다면(유효 비트 0) 페이지 폴트 발생
4) 페이지 폴트 처리 루틴은 해당 페이지를 메모리에 적재하고 유효 비트를 1로 설정
5) 1번 수행

페이지 교체 알고리즘: 쫓아낼 페이지를 결정하는 방법

페이지 교체 알고리즘

페이지 폴트를 가장 적게 일으키는 알고리즘을 좋은 알고리즘으로 평가

페이지 폴트 횟수

페이지 참고열을 통해 알 수 있음

FIFO 페이지 교체 알고리즘(First-In-First-One Page Replacement Algorithm):

메모리에 먼저 올라온 페이지부터 내쫓는 방식

2차 기회 페이지 교체 알고리즘(second chance page replacement algorithm):

FIFO 페이지 교체 알고리즘의 변형. 기회를 한 번 더 줌.
참조 비트가 1인 경우 당장 내쫓지 않는다.

최적 페이지 교체 알고리즘(optimal page replacement algorithm)

CPU에 의해 참조되는 횟수를 고려하는 페이지 교체 알고리즘. 사용 빈도가 가장 낮은 페이지를 교체

운영체제에 사용하기보다는(현실적으로 예측 불가) 다른 페이지 교체 알고리즘의 이론상 성능을 평가하기 위한 목적.

LRU 페이지 교체 알고리즘(LRU: Least Recently Used Page Replacement Algorithm)

최근에 사용되지 않은 페이지는 앞으로도 사용되지 않을 것

🫡 외우려고 하지말고, 왜 사용하는지, 대표적인 건 무엇인지 아는 정도로 보기

스래싱과 프레임 할당

1.프레임 할당 방식

파일과 디렉터리

파일

파일 유형: 확장자(extension)을 이용해 운영체제에게 파일 유형을 알려준다.

디렉토리

절대 경로: 루트부터 시작하는 경로

상대 경로: 현재 디렉터리부터 시작하는 경로

파일 시스템

파티셔닝과 포매팅

partitioning : 저장 장치의 논리적인 영역을 구획하는 작업

formmatting: 파일 시스템을 설정하여 어떤 방식으로 파일을 저장하고 관리할 것인지를 결정하고, 새로운 데이터를 쓸 준비를 하는 작업

파일 할당 방법

1.연속 할당(cotiguous allocation)

구현이 단순하지만, 외부 단편화를 야기한다.

연결 할당(linked allocation): 각 블록 일부에 다음 블록의 주소를 저장하여 각 블록이 다음 블록을 가리키는 형태로 할당하는 방식. 파일을 이루는 데이터를 연결 리스트로 관리. C언어의 포인터와 같은 개념

단점:

하나씩 차례대로 읽어야 한다.(임의 접근 속도가 느림)

하드웨어 고장이나 오류 발생 시 해당 블록 이후 블록은 접근할 수 없음.

2.불연속 할당

연결 할당

색인 할당(indexed allocation): 파일의 모든 주소를 색인 블록에 모아 관리하는 방식

파일 시스템 살펴보기

1.FAT 파일 시스템
에서의 디렉터리들은 다음 형식으로 블록에 저장된다고 한다.

2.유닉스 파일 시스템

색인 할당, 유닉스 파일 시스템에서 색인 블록을 i-node라고 부른다.

참고

저널링 파일 시스템: 시스템 크래시가 발생한 직후에 로그 영역을 읽어 크래시가 발생한 당시 어떤 작업을 실행 중이었는지 알아낸 다음 해당 작업을 완료. MS NT 파일 시스템, 리눅스의 ext3, ext4 파일 시스템을 포함해 대부분의 파일 시스템이 저널링 기능을 지원한다.

마운트: 한 저장 장치의 파일 시스템에서 다른 저장 장치의 파일 시스템에 접근할 수 있도록 파일 시스템을 편입시키는 작업

숙제 1: 400의 확인 문제 1번 풀고 인증하기

1) 최초 적합: 최초로 발견한 적제 가능한 빈 공간에 프로세스를 배치하는 방식
2) 최악 적합: 프로세스가 적재될 수 있는 가장 큰 공간에 프로세스를 배치하는 방식
3) 최적 적합: 프로세스가 적재될 수 있는 가장 작은 공간에 프로세스를 배치하는 방식

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

🦖 어렵습니다.... 책 여러번 읽기...

# data[].attributes.attachment_link.title
혼자 공부하는 컴퓨터 구조+운영체제 (6)

# data[].attributes.body
https://m.blog.naver.com/sonej94113/223550515365

블로그 포스팅하고는 정작 제출을 잊어서 급히 올립니다

# data[].attributes.attachment_link.title
기록 : 네이버 블로그

# data[].attributes.attachment_link.description
당신의 모든 기록을 담는 공간

# data[].attributes.body
6주차 제출 합니다.

# data[].attributes.attachment_link.readable_text
[Chapter 7]

문서 객체 : HTML 페이지에 있는 html, body, title, h1, div, span 등의 요소를 자바스크립트에서는 문제 객체라고 말한다.

문서 모델 객체 : 문서 객체를 조합해서 만든 전체적인 형태. 약자 'DOM'

트리 : 비선현 자료구조의 일종, 나무처럼 생긴 것에서 유래

- 부모 : 어떤 문서 객체의 위에 있는것

- 자식 : 어떤 문서 객체의 아래에 있는것

이벤트 : 웹 브라우저에서 발생하는 사용자의 동작, 마우스 클릭, 스크롤, 키보드 입력, 페이지 전환 등

* DOMContentLoaded 이벤트 : HTML 페이지의 모든 문서 객체(요소)를 웹 브라우저가 읽었을 때 발생시키는 이벤트

이벤트 리스너 : 이벤트가 발생할 때 실행하는 함수. 이벤트 리스너 또는 이벤트 핸들러라고 함.

이벤트 모델 : 이벤트를 연결하는 방법

- 고전 이벤트 모델 : 문서 객체가 갖고 있는 onOO으로 시작하는 속성에 함수를 할당하여 이벤트를 연결하는 방법

- 인라인 이벤트 모델 : onOO 으로 시작하는 속성을 HTML 요소에 직접 넣어 이벤트를 연결하는 방법

이벤트 객체 : 이벤트 리스너의 첫 번째 매개변수로 이벤트와 관련된 정보가 들어있다.

키 코드 : 키보드 이벤트가 발생할 때 어떤 키를 눌렀는지 키 값을 구분할 수 있는 코드

정규 표현식 : 특정한 규칙을 가지는 문자열의 집합.

유효성 검사를 쉽고 확실하게 구현할 수 있음.

ex) 이메일, 패스워드 검사 등

응용 프로그램 프로그래밍 인터페이스 API(Application Programming Interface)

애플리케이션 소프트웨어에서 프로그램들이 서로 상호작용하도록 도와주는 매개체

[Chapter 8]

예외 : 프로그램 실행 중에 발생하는 오류. 예외 또는 런타임 오류라고 부른다.

예외 처리 : 문법적인 오류를 제외하고 실행 중간에 발생하는 오류를 '예외'라고 부르는데, 예외가 발생하여 프로그램이 중단되지 않도록 처리하는 것을 말한다.

* 조건문 사용 : 예외가 발생하지 않게 만드는 기본 예외 처리

* try catch finally 구문 : try 구문 안에서 예외가 발생하면 catch 구문에서 처리하는 고급 예외 처리

- finally 구문은 예외 발생과 상관 없이 무조건 실행되기 때문에 필요한 경우에만 사용한다.

* throw 키워드 : 예외를 강제로 발생시키는 키워드. 예외가 발생하면서 프로그램이 중단된다.

구문 오류 : 프로그램 실행 전에 발생하는 오류

구문 오류가 있으면 프로그램 자체가 실행되지 않는다.

p. 315의 <직접 해보는 손코딩>을 실행한 후 출력되는 고양이 이미지 캡처하기

서버 다운으로 이미지 사진 확인 불가

[추가숙제]

p. 352 누적 예제를 활용하여 본인의 할 일 목록을 만들어 캡처하기

# data[].attributes.attachment_link.description
6주차 진도 [Chapter 07~08] [Chapter 7] 문서 객체 : HTML 페이지에 있는 html, body, title, h1, div, span 등의 요소를 자바스크립트에서는 문제 객체라고 말한다. 문서 모델 객체 : 문서 객체를 조합해서 만든 전체적인 형태.

# data[].attributes.body
6주차 제출합니다!!

더운 여름 동안 혼공단분들 그리고 족장님,, 넘 고생 많으셨습니다! :)

# data[].attributes.attachment_link.readable_text
데이터 시각화를 위해 R 시각화 1순위 패키지인 ggplot2 패키지를 사용한다.

(1) ggplot()

ggplot(데이터세트, aes(데이터속성)

그래프를 표현하는 좌표를 그리기 위한 판을 짜는 함수

aes()함수를 이용해 x축과 y축에 변수를 매핑한다.

패키지 설치
install.packages("ggplot2")
library(ggplot2)

ggplot(airquality, aes(x=Day, y=Temp))

* 작성한 그래프를 지울 때는 plot.new() 함수를 실행한다.

(2) 각종 그래프

매핑을 위해 작성한 ggplot() 함수 뒤에 + 를 붙여 추가로 적어주면 된다.

* 그래프를 그리는 수치형 데이터로 표현할 시 빈 범주가 생길 수 있으므로

범주화 할 수 있는 factor() 함수를 사용할 수 있다.

+ geom_point()

산점도

size=3, color="red" 등으로 사이즈와 색상을 지정하는 옵션을 설정할 수 있음

+ geom_bar()

막대 그래프

x 축만 지정하면 된다.
width=0.5 등으로 막대의 두께를 바꿔주는 옵션을 설정할 수 있음

+ geom_bar(aes(fill=factor(gear)))

누적 막대 그래프

gear 변수의 빈도가 막대 안에 채워진다.

*누적할 변수는 값이 비어있을 경우 누적이 제대로 표현되지 않으므로 반드시 factor() 함수를 사용해야 한다. fill 옵션을 사용하면 누적 변수의 범주별 빈도가 막대 그래프에 색상으로 채워짐.

+ geom_bar(aes(fill=factor(gear))) + coord_polar

선버스트 차트(계층 구조의 데이터를 수준별로 비율을 표시하는 그래프)

theta="y" 옵션을 추가하면 가운데가 도넛처럼 비어있는 선버스트 차트가 그려짐.

+ geom_histogram()

히스토그램

binwidth = 1 등으로 막대 구간 조정 옵션을 설정할 수 있음.

* 줄바꿈시 연산자까지 작성한 후 줄을 바꿔야 코드 한 줄로 인식됨.

* 그래프들끼리 여러개 더할 수 있음 (한 그래프가 하나의 레이어처럼 동작, 여러개 더하면 여러 레이어가 겹쳐지는 꼴)

# 산점도 ggplot(airquality, aes(x=Day, y=Temp)) + geom_point() ggplot(airquality, aes(x=Day, y=Temp)) + geom_point(size=3, color='red') # 선 그래프 ggplot(airquality, aes(x=Day, y=Temp)) + geom_line() # 막대 그래프 ggplot(mtcars, aes(x=cyl)) + geom_bar(width = 0.5) ggplot(mtcars, aes(x=factor(cyl))) + geom_bar(width = 0.5) # 누적 막대 그래프 ggplot(mtcars, aes(x=factor(cyl))) + geom_bar(aes(fill=factor(gear))) # 선버스트 차트 ggplot(mtcars, aes(x=factor(cyl))) + geom_bar(aes(fill=factor(gear))) + coord_polar() ggplot(mtcars, aes(x=factor(cyl))) + geom_bar(aes(fill=factor(gear))) + coord_polar(theta="y") # 상자 그림 ggplot(airquality, aes(x=Day, y=Temp, group=Day)) + geom_boxplot() # 히스토그램 ggplot(airquality, aes(Temp)) + geom_histogram(binwidth = 1) #막대 너비 # 그래프 + 그래프 + ~~ ggplot(airquality, aes(x=Day, y=Temp)) + geom_line() + geom_point() ggplot(airquality, aes(x=Day, y=Temp)) + geom_line(color="red") + geom_point(size=3) # 291페이지 확인문제 2 data("diamonds") ggplot(diamonds, aes(x=cut)) + geom_bar(width=0.5) # 확인문제 3 ggplot(diamonds, aes(x=carat, y=price)) + geom_line()

6-2. 그래프에 객체 추가

그래프 위에 직선, 도형, 텍스트 객체를 추가하는 방법

(1) 사선 그리기 : geom_abline() 함수

geom_abline(intercept=절편값, slope=기울기값) # ex) ggplot(economics, aes(x=date, y=psavert)) + geom_line() + geom_abline(intercept = 12.18671, slope = -0.0005444)

(2) 평행선 그리기 : geom_hline() 함수

geom_hline(yintercept=y절편) #ex) ggplot(economics, aes(x=date, y=psavert)) + geom_line() + geom_hline(yintercept = mean(economics$psavert))

(3) 수직선 그리기 : geom_vline() 함수

geom_vline(xintercept=x절편) # ex) library(dplyr) x_inter <- filter(economics, psavert == min(economics$psavert))$date ggplot(economics, aes(x=date, y=psavert)) + geom_line() + geom_vline(xintercept = x_inter)

*직접 원하는 날짜값을 넣을 수 있지만 "2015-07-01" 이런 형태로 입력하면 글자로 인식되므로 as.Date() 함수를 이용해야함

geom_vline(xintercept=as.Date("2005-07-01"))

(4) 레이블 입력하기 : geom_text() 함수

geon_text(aes(label = 레이블, vjust = 세로 위치, hjust = 가로 위치)) # ex) ggplot(airquality, aes(x=Day, y=Temp)) + geom_point() + geom_text(aes(label=Temp, vjust=0, hjust=0))

* 레이블을 입력하면 기본적으로 점 우상단에 찍히며 vjust 에 + 값 찍히면 아래로, hjust 에 + 값 찍히면 왼쪽으로 이동한다.

(5) 도형 및 화살표 넣기 : annotate() 함수

annotate("모양", xmin=x축 시작, xmax=x축 끝, ymin = y축 시작, ymax=y축 끝)
그래프에 사각형 그리기
ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point() + annotate("rect", xmin=3, xmax=4, ymin=12, ymax=21, alpha =0.5, fill="skyblue")

* alpha : 투명도(1에 가까울수록 불투명), fill :채우기 색상 지정
+ 화살표 추가
+ annotate("segment", x=2.5, xend=3.7, y=10., yend=17, color = 'red', arrow=arrow())

* segment : 선, x와 xend 로 표현
+ text 추가
+ annotate("text", x=2.5, y=10, label='point')

출력물 >

(6) 좀 더 알아보기 1
그래프 제목 및 축 제목 추가하기 : labs() 함수 디자인 테마 적용하기 : theme() 함수 -> 여러개 존재
labs(x="x축명", y="y축명", title="그래프 제목") # ex) ggplot(mtcars, aes(x=gear)) + geom_bar() + labs(x='기어 수', y='자동차 수', title='변속기 기어별 자동차수') + theme_linedraw()

(7) 좀 더 알아보기 2
두 변수 간 상관관계 파악하기 : cor.test() 함수
cor.test(테이블명$변수명1, 테이블명$변수명2) # ex) library(readxl) exdata1 <- read_excel("C:/Rstudy/Sample1.xlsx") exdata1 cor.test(exdata1$Y20_CNT, exdata1$Y21_CNT)

엑셀로 파일을 불러오고 두 변수간의 상관관계를 cor.test 함수로 비교한다.

cor 값은 0.7582, p-value 값은 0.000107 이므로 통계적으로 유의하고 양의 상관관계가 있으며 이는 20년 카드 이용건수가 오를수록 21년 이용건수도 증가한다고 해석할 수 있다.
회귀분석하기 : lm() 함수
lm(종속변수~독립변수, data = 데이터세트) # ex) reg_result <- lm(Y21_CNT~Y20_CNT, data=exdata1) reg_result

y 절편이 0.7014, 기울기가 0.7864다.

즉 y(21년 카드 이용건수) = 0.7104 + 0.7864 * x(20년 카드 이용건수) 로 회귀함수를 도출할 수 있다.
시각화하기
ggplot(exdata1, aes(x=Y20_CNT, y=Y21_CNT)) + geom_line() + geom_abline(intercept = 0.7104, slope = 0.7864)

(8) 확인문제

# 307페이지 확인문제 1번 cor.test(iris$Sepal.Length, iris$Petal.Length) # 통계적으로 유의하며 양의 상관관계가 있음. # 2번 iris_result <- lm(Petal.Length~Sepal.Length, data=iris) iris_result # 3번 library(ggplot2) ggplot(iris, aes(x=Sepal.Length, y=Petal.Length)) + geom_line() + geom_abline(intercept = -7.101, slope = 1.858)

6-3. 지도 시각화 : ggmap 패키지

지도 상에 위치 데이터를 표시하여 보여주는 것이 지도 시각화!

R에서는 지도를 API(Application Programming Interface)로 불러와 시각화를 할 수 있다.

(구글 지도, 오픈스트리트맵, 스테이먼 맵 등 지원)

이 중 구글 지도는 ggmap 패키지로 불러올 수 있다.

시작하기 위해 구글 지도 플랫폼에서 미리 API 키를 발급받아 와야한다.
http://mapsplatform.google.com

Google Maps Platform - Location and Mapping Solutions

mapsplatform.google.com

실습을 위해 API 키 보호는 [나중에] 클릭.

API 미리 복사해두지 않아도 key&credentials 파트에 가보면 확인할 수 있음.

이하 ggmap 패키지 사용법.

(1) resister_google(key="사용자 API 키")

발급받은 구글 지도 API 키를 등록하는 함수

사용자 API 키 부분에 위에서 각자 발급받은 개인 API 코드를 입력하면 된다.

(2) get_googlemap(지명 or 위도경도값, maptype="지도 유형")

설정한 위치를 지도로 가져오는 함수
1) 지명 or 위도경도값
* 위도와 경도값으로 가져오기

get_googlemap(c(lon=127, lat=37.6), maptype = "roadmap")

* 위치를 포함하는 문자열로 가져오기

get_googlemap("seoul, south korea", maptype="roadmap)

교재에서는 seoul 만 적혀있으나 R에서는 south korea 까지 써주는걸 추천한다.
2) maptype="지도 유형"
(3) ggmap()

위치 데이터 지도로 시각화

(4) geocode()

위치를 포함하는 문자열(지명 혹은 주소)을 위도와 경도 값으로 반환

(5) 사용 예시 1

install.packages("ggmap") library(ggmap)

ggmap 패키지 설치 후 세팅해주기

register_google(key="개인 API 값") gg_seoul <- get_googlemap("seoul, south korea", maptype = "roadmap") ggmap(gg_seoul)

발급받은 API 값 등록하고, 서울 지명을 넣고 roadmap 타입으로 지도 가져와서 gg_seoul에 저장해준다.

ggmap() 함수를 이용하여 변수에 할당된 위치데이터로 구글 지도 가져오기.

굳이 이중으로 안하고 ggmap() 함수 안에서 get_googlemap 해줘도 된다.

(6) 사용예시 2

library(dplyr) library(ggplot2)

밑에서 %>% 기호를 사용해줄 것이므로 dplyr 패키지 로드

그래프 사용할 것이므로 ggplot2 로드

geo_code <- enc2utf8("대전역") %>% geocode() geo_code

enc2utf8 함수는 인코딩을 UTF-8로 변환하는 함수이다. Windows 운영체제는 기본적으로 CP949 라서 위치 데이터를 한글 문자열로 가져오려면 UTF-8 로 변환해주는 과정을 거쳐야 한다.

위는 그렇게 utf8 로 한글을 입력받은 뒤 geocode() 함수를 통해 경도와 위도값이 나오게 되는데,

이 경우 데이터 프레임 형태로 저장된다.

geo_data <- as.numeric(geo_code) geo_data

데이터 프레임 형태의 경우 get_googlemap 에서 인식을 할 수 없으므로 이 데이터 프레임을 숫자형 벡터로 변환한다.

get_googlemap(center = geo_data, maptype = "roadmap", zoom=13) %>% ggmap()+ geom_point(data=geo_code, aes(x=lon, y=lat))

get_googlemap()의 경우 숫자형 벡터를 받지만, 그래프를 그리기 위한 geom_point 의 경우 데이터프레임 형태를 받는다. 각각 다른 데이터 형태가 요구된다는 것 알고 가기!

zoom 의 경우 지도를 확대하거나 축소하는 옵션이다.

위처럼 하게되면 최종적으로 아래와 같은 결과값이 나온다.

(7) 확인문제

# 321페이지 확인문제 3번 get_googlemap(c(lon=127.0276, lat=37.49795), maptype="roadmap", zoom=15) %>% ggmap() # 확인문제 4번 library(ggmap) resister_google(key="AIzaSyDElVnICNMybUM_mAlqS85n1zBUysvo4_c") gg_busan <- get_googlemap("busan, south korea", maptype="roadmap") ggmap(gg_busan)

6-4. 과제

[기본 과제]

ggplot(airquality, aes(x=Day, y=Temp)) + geom_line() + geom_point() ggplot(airquality, aes(x=Day, y=Temp)) + geom_line(color="red") + geom_point(size=3)

[추가 과제]

geo_code1 <- enc2utf8("남산 타워") %>% geocode() geo_data1 <- as.numeric(geo_code1) get_googlemap(geo_data1, maptype="roadmap", zoom=15) %>% ggmap() + geom_point(data=geo_code1, aes(x=lon, y=lat))

# data[].attributes.attachment_link.title
[혼자 공부하는 R 데이터분석] 6주차_데이터 시각화(ggplot2, ggmap)

# data[].attributes.attachment_link.description
6-1. 그래프 그리기데이터 시각화를 위해 R 시각화 1순위 패키지인 ggplot2 패키지를 사용한다. (1) ggplot()ggplot(데이터세트, aes(데이터속성)그래프를 표현하는 좌표를 그리기 위한 판을 짜는 함수aes()함수를 이용해 x축과 y축에 변수를 매핑한다.패키지 설치install.packages("ggplot2")library(ggplot2) ggplot(airquality, aes(x=Day, y=Temp)) * 작성한 그래프를 지울 때는 plot.new() 함수를 실행한다.

# data[].attributes.body
마지막 6주차 제출합니다!!

# data[].attributes.attachment_link.readable_text
드디어 마지막 주차!!! 6주차까지 끝났다니 믿겨지지 않네요 ㅠ 6주차까지 달린 혼공족장님과 혼공단들 모두 수고하셨습니다!

Chapter 14 가상 메모리

메모리에서 사용하지 않는 프로세스(대기, 오랫동안 사용x)를 스왑 영역에 내보내는 것 -> 스와핑swapping

스왑아웃(스왑영역으로) <-> 스왑인(다시 메모리로. 이전과 다른 주소에 적재될 수 있습니다.)

* 연속 메모리 할당 방식 : 사용자 공간에 연속적으로 배치 -> 외부 단편화 external fragmentation 문제 내포!(그 공간보다 큰 프로세스를 적재하기 어려운 상황(낭비)) -> 압축 companction(빈 공간모으기. 하던 일을 중지하고 오버헤드 야기하고 명확하지 않습니다.) -> 가상 메모리 기법, 페이징 기법이 그 대안!

최초 적합first fit : 빈 공간 검색 중 발견 시 배치

최적 적합best fit : 가장 작은 공간에 배치

최악 적합worst fit : 가장 넓은 공간에 배치

가상 메모리virtual memory : 실행하고자 하는 프로그램 일부만 메모리에 적재

페이징 : 가상 메모리의 기법. 페이지를 프레임에 할당 하는 기법.

페이지 : 프로세스 논리 주소 공간 을 일정한 단위로 자른 것.

프레임 : 메모리 물리 주소 공간 을 일정한 단위로 자른 것.(페이지와 동일 크기)

페이지 아웃(스왑 아웃)<->페이지 인(스왑 인)

불연속적이므로, 페이지 테이블로 어떤 페이지가 어떤 프레임에 할당되었는지 확인할 수 있습니다. 따라서, CPU가 논리 주소를 볼 때 연속적이게 되므로 순차적으로 실행하면 됩니다.

페이지 테이블 베이스 레지스터 Page Table Base Register : 각 프로세스의 페이지 테이블이 적재된 주소

1. 프로세스 실행 -> 2. PTBR이 페이지 테이블을 가리킴 -> 3. CPU가 적재되된 프레임을 알게 됨.

1)페이지 테이블을 보기, 2)프레임에 접근하기로 인해 두번 메모리 접근하는 문제를 해결하기 위해 TLB translation lookaside buffer 라는 페이지 테이블의 캐시 메모리가 있습니다. 페이지 테이블의 일부를 저장하며, 페이지 번호가 있으면 TLB 히트, 없으면 TLB 미스 입니다.

* 페이징 시스템의 기본 논리 주소. 페이지 테이블로 변환하여 확인!

페이지 번호(접근 페이지 번호) | 변위(얼만큼 떨어져 있는 지)

페이지 테이블 엔트리 PTE : 페이지 테이블의 각 행

* 접근 가능? 유효 비트 1 ( 접근 가능하지 않은 유효 비트 0에 접근하려고 할 때, 페이지 폴트라는 예외가 발생합니다.)

* 보호 비트

읽기 가능? r 1

쓰기 가능? w 1

실행 가능? x 1

* 접근(읽거나 쓴)한 적 있음? 참조 비트 1

* 변경한 적 있음? 수정 비트 1 (수정된 적이 있는 페이지가 스왑 아웃될 경우 변경값을 보조기억장치에 기록하는 작업 필요.)

요구 페이징 demand paging : 처음부터 모든 페이지 적재하지 않고 필요한 페이지만 메모리에 적재 하는 것.

(+ 순수 요구 페이징은 적재하지 않은 채 무작정 실행하는 것)

페이지 참조열 page reference string : 연속된 페이지를 생략한 페이지열. 페이지 폴트 횟수를 알 수 있습니다.

FIFO 페이지 교체 알고리즘 : 메모리에 먼저 올라온 페이지부터 쫓아내는 알고리즘

2차 기회 페이지 교체 알고리즘 : FIFO에서 한 번 더 기회를 주는 방식

최적 페이지 교체 알고리즘 : 사용 빈도가 가장 낮을 페이지를 교체(예측이 어려우므로 구현이 어려워 성능평가로 사용됩니다.)

LRU 페이지 교체 알고리즘 Least Recently Used: 오랫동안 사용되지 않을x 않은o 페이지를 교체하는 알고리즘

스래싱 thrashing : 프로세스 실제 실행 시간 < 페이징에 더 많은 시간을 소요하여 성능이 저해되는 문제

스래싱을 그래프로 표현했을 때, 가로축이 멀티 프로그래밍의 정도(동시 실행 프로세스 수), 세로축이 CPU 이용률입니다.

동시 실행 프로세스 수가 늘어날 수록, CPU이용률도 점차 늘어나다가 필요 이상이 되면 사용할 수 있는 프레임 수가 적어 페이지 폴트의 발생률이 빈번해집니다. 그에 따라 CPU이용률도 낮아지고 성능이 저해됩니다. -> 따라서, 최소한의 프레임 수를 파악하고 적절하게 할당해야 합니다.

* 정적 할당 방식(단순 프로세스 크기와 물리 메모리 크기만 고려)

균등 할당 equal allocation : 균등하게 프레임 할당

비례 할당 proportional allocation : 프로세스 크기에 따라 프레임 할당

* 동적 할당 방식(다음 두 방식을 통해 결정하면, 프로세스 실행을 보고 할당할 프레임을 결정합니다.)

작업 집합 모델 working set model : 실행 중인 프로세스가 일정 시간 동안 참조한 페이지의 작업 집합을 해당 크기만큼만 프레임 할당

페이지 폴트 빈도PPF 기반 프레임 할당 방식 : 페이지 폴트율에 상한선과 하한선을 정하고 해당 범위에서만 프레임을 할당하는 것.

Chapter 15 파일 시스템

파일 : 보조기억장치에 저장된 관련 정보(이름, 실행 정보, 부가 정보(속성attribute 또는 메타데이터metadata))의 집합.

확장자 extension : 파일유형을 알리기 위해 가장 많이 사용하며, 파일종류가 무엇인지 운영체제에게 알려주는 것입니다.

1단계 디렉터리 single-level directory : 모든 파일이 하나의 디렉터리 안에 있습니다.

트리 구조 디렉터리 tree-structured directory : 루트 디렉터리(/)와 그 아래의 여러 서브 디렉터리로 이루어진 구조. 경로가 있습니다.

디렉터리도 파일이므로 디렉터리 테이블로 보조기억 장치에 저장 됩니다.

.. 상위

. 현재

파티셔닝partitioning : 저장 장치의 논리적인 영역을 구획하는 작업

파티션 : 나누어진 영역 하나하나

포매팅 formatting : 포맷하는 작업. 파일 시스템 설정방법 결정 및 새 데이터 쓸 준비 작업.

파일과 디렉터리를 블록 단위로 읽고 쓰며, 크기가 크면 여러 블록에 걸쳐서 저장됩니다.

연속 할당 : 가장 단순하지만 외부 단편화를 야기할 수 있습니다.

연결 할당 : 연결 리스트 형태로 블록의 일부에 다음 블록 주소를 저장하는 형태. 첫 번째부터 하나씩 읽어야 하며 오류가 발생하면 블록에 접근할 수 없다는 단점이 있습니다.

색인 할당 : 색인 블록이라는 하나의 블록에 모든 블록 주소를 저장하는 형태. ex) 유닉스 파일 시스템

* 파일 시스템

- FAT 파일 시스템 : 파일 할당 테이블을 통해 블록 주소들을 모아 테이블로 관리. ex) USB, SD 카드

- 유닉스 파일 시스템 : 색인 블록 i-node에 파일 속성 정보를 표현합니다. (12개는 직접 블록 주소 저장, 모자라면 13번째에 단일 간접 블록 주소 저장, 또 모자라면 14번째 주소에 이중 간접 블록 주소 저장, 또 모자라면 15번째 주소에 삼중 간접 블록 주소 저장)

이외에도 윈도우의 NTFS(NT 파일 시스템), 리눅스의 ext 파일 시스템 등이 있습니다.

숙제

# data[].attributes.attachment_link.title
[혼공컴운] 6주차_운영체제 마무리

# data[].attributes.attachment_link.description
드디어 마지막 주차!!! 6주차까지 끝났다니 믿겨지지 않네요 ㅠ 6주차까지 달린 혼공족장님과 혼공단들 모두 수고하셨습니다!Chapter 14 가상 메모리메모리에서 사용하지 않는 프로세스(대기, 오랫동안 사용x)를 스왑 영역에 내보내는 것 -> 스와핑swapping스왑아웃(스왑영역으로) 스왑인(다시 메모리로. 이전과 다른 주소에 적재될 수 있습니다.) * 연속 메모리 할당 방식 : 사용자 공간에 연속적으로 배치 -> 외부 단편화 external fragmentation 문제 내포!(그 공간보다 큰 프로세스를 적재하기 어려운 상황(낭비)) -> 압축 companction(빈 공간모으기.

# data[].attributes.body
족장님 그동안 정말 정말 감사했습니다!! 덕분에 정말 어떻게든 완주할 수 있었어요.. 정말로요..

# data[].attributes.attachment_link.readable_text
답: 1010개, 입력 특성에 출력층의 뉴런 개수를 곱한 가중치 1000에 각 뉴런이 가지는 절편 개수를 더한다.

2. 케라스의 Dense 클래스를 이용해 신경망의 출력층을 만드려고 합니다. 이 신경망이 이진 분류 모델이라면 activation 매개변수에 어떤 활성화 함수를 지정해야 하나요?

답: Signoid 함수, 이진 분류 모델에는 Signoid 함수를, 다중 분류 모델에서는 softmax 함수를 사용.

- Dense 층: 밀집층, 완전 연결층이라고도 하며 뉴런과 입력층의 변수들이 모두 한 번씩 곱해져 가중치가 모두 생긴다. 밀집층에서는 분류하려는 클래스의 개수와 동일한 개수의 뉴런이 있어야 한다.

# data[].attributes.attachment_link.description
Ch.07-1 확인문제 1. 어떤 인공 신경망의 입력 특성이 100개이고 밀집층에 있는 뉴런 개수가 10개일 때 필...

# data[].attributes.body
혼공학습단 12기도 무사히 마칠 수 있어서 고맙습니다. 더운 날 건강 조심하시고요~ 감사합니다.

# data[].attributes.attachment_link.provider_name
네이버 블로그 | 종이책을 좋아하는 개발자

# data[].attributes.attachment_link.title
[한빛미디어] 혼자 공부하는 R 데이터 분석

# data[].attributes.attachment_link.description
혼공학습단 12기는 '혼자 공부하는 R 데이터 분석'입니다. 지난 11기 이후 졸업하겠다고 말씀드…

# data[].attributes.body
6주차 제출합니다 족장님도 모두 멋지십니다~~!

# data[].attributes.attachment_link.title
릴센트의 인생 재개발 : 네이버 블로그

# data[].attributes.headline
[혼공 네트워크] 6주차 김주원

# data[].attributes.subject
[혼공 네트워크] 6주차 김주원

# data[].attributes.body
혼공단 네트워크 6주차 과제 제출합니다!
모두 6주간 고생 많으셨어요~!

이번 여름에는 유독 감기로 힘들었는데요, 특히 7월, 8월 한번씩 열감기가 와서 일주일씩 날아가서 힘들었네요.

저번 기수 때 매번 사려깊은 메시지로 동기부여를 해주셔서, 페이스 북 댓글과, 홈페이지에 들어가 문구를 확인하는 낙으로 참여했었는데, 이번 기수에서는 사이드 프로젝트 릴리즈랑 대외활동과 겹쳐서 1,2주차 이후로 확인을 못했었네요. 이번 달 마무리될 쯤 답글을 남기도록 하겠습니다.

(특히 이번주는 6,7단원 정리글을 가독성 있게 다듬어야해서 퀴즈만 먼저 제출합니다. 시험이 있어서 시간이 많이 없었네요)

매번 200명가까이 되는 제출 글들에 댓글을 남기시는데 한 포스팅에 3분이라고만 계산해도 적어도 거의 매 주 10시간가까이 할애하신 다는 것인데 대단하고 인상적이라는 생각이듭니다. 특히, 매번 사람마다 장문의 다른 댓글을 남겨주시는데 큰 도전이 되네요 :)

족장님도 한 기수 마무리하시느라 고생많으셨어요. 늘 행복하시고 건강만하세요!

미션 :

링크 : https://uomnf97.tistory.com/100

# data[].attributes.attachment_link.title
'혼공 학습단/혼자 공부하는 네트워크' 카테고리의 글 목록

# data[].attributes.attachment_link.description
사회적 가치를 창출하는 ML Engineer를 꿈꿉니다. 지속가능한 성장을 추구하며 성장의 발자취를 블로그에 남기려고 합니다. 오늘도 방문해주셔서 감사드려요.

# data[].attributes.body
족장님을 필두로 모두들 수고하셨고, 감사합니다. 다시 한번 기회가 있으면 좋겠습니다.

# data[].attributes.body
안녕하세요. 미국에서 업무 때문에 혼자 공부하는 아기 아빠입니다.

더운 여름 수고하셨습니다!

# data[].attributes.body
혼공컴운 6주차 제출합니다!

# data[].attributes.attachment_link.readable_text
연속 메모리 할당
프로세스에 연속적인 메모리 공간을 할당하는 방식

스와핑
메모리에 적재된 프로세스들 중현재 실행되지 않는 프로세스를 임시로
swap space에 쫓아내고 이렇게 생긴 공간에 다른 프로세스를 적재하여 실행하는 방식을 뜻한다.
이 과정은 swap-out(swap space로 쫓아냄) swap-in(swap space에 있던 프로세스를 다시 메모리로 옮겨오는 것)을 통해 이루어진다
//이 때 스왑 아웃되기 전 physical address와 달라질 수 있음

메모리 할당
메모리 내 빈 공간에 프로세스를 할당하는데는 대표적으로 3가지 방법이 있다.
1. 최초 적합(first fit)
os가 메모리 내 빈 공간 검색하다 적재할 빈 공간 발견하면 그 즉시 프로세스 배치
2. 최적 적합(best fit)
os가 빈 공간 전부 검색해 본 후 프로세스가 적재 가능한 가장 작은 공간에 배치
3. 최악 적합(worst fit)
os가 빈 공간 전부 검색해 본 후 가장 큰 공간에 프로세스 배치

외부 단편화(externel fragmentation)
프로세스들이 메모리에 연속적으로 할당되는 환경에서 프로세스들이 실행되고 종료되기를 반복하며 메모리 사이 사이에 빈 공간이 생기게 됨으로써
메모리 내 빈 공간의 총합보다 실질적으로 프로세스 할당이 가능한 공간이 적게 되는것
-> compaction(압축)을 통해 메모리 조각을 모아 해소할 수 있음
그러나 이 작은 공간들을 하나로 모으는 동안 시스템이 하던 일을 중지해야 하고,
이 작업은 overhead가 크며, 압축의 기준 또한 결정이 어려움
-> 가상 메모리 기법 중 하나인 페이징을 통해 해결

페이징
메모리와 프로세스를 일정한 단위로 잘라 메모리에 불연속적으로 할당하는 방식
page: 프로세스의 논리 주소 공간
frame: 메모리 물리 주소 공간
즉 페이지를 프레임에 할당하는 방식

페이징은 스와핑 기법을 사용 가능
page in과 page out(내용은 swaping에서의 방법과 같다.)

프로세스가 분리되어 있다면 cpu입장에서는 다음에 실행할 명령어 위치를 찾기 어렵기때문에
logical address가 연속적으로 배치되도록 page table을 사용함.
//현재 페이지가 어떤 프레임에 할당되었는지

# data[].attributes.attachment_link.title
[혼공학습단 12기]혼자 공부하는 컴퓨터구조+운영체제 (6주차)

# data[].attributes.attachment_link.description
연속 메모리 할당프로세스에 연속적인 메모리 공간을 할당하는 방식스와핑메모리에 적재된 프로세스들 중현재 실행되지 않는 프로세스를 임시로 swap space에 쫓아내고 이렇게 생긴 공간에 다른 프로세스를 적재하여 실행하는 방식을 뜻한다.이 과정은 swap-out(swap

# data[].attributes.body
여러분 수고하셨습니다~~

# data[].attributes.attachment_link.readable_text
2학기때 배울 C언어도 예습할겸, 학교서 실시하는 C언어 수업을 듣고자 했지만,아쉽게도 인원이 가득 차 듣지못했거든요.
그래서 아쉽지만 유튜브 강의라도 들으려 했는데 우연히도 sns에서 혼공학습단을 알게되었습니다.
마침 고등학교때 혼공C 도서를 받았어서 운명이다 싶어 이번 12기 혼공단에 참여하게되었습니다.

C언어는 오래된 언어다 보니 파이썬같은 최신 언어와 문법적인 부분에서 차이가 있어서 걱정이 앞섰는데,

이번 기회를 통해 포인터 파트까지 공부할 수 있어 뜻깊은 방학이였습니다. (비록 매주 지각하긴 했지만 ㅠㅠ)

이번 학습단을 통해 많은걸 배운 6주였고, 다음에도 시간이 된다면 다른 도서로 도전하고 싶습니다.
여러분 고생많으셨습니다!!

# data[].attributes.attachment_link.description
2학기때 배울 C언어도 예습할겸, 학교서 실시하는 C언어 수업을 듣고자 했지만,아쉽게도 인원이 가득 차 듣지못했거든요.그래서 아쉽지만 유튜브 강의라도 들으려 했는데 우연히도 sns에서 혼공학습단을 알게되었습니다.마침 고등학교때 혼공C 도서를 받았어서 운명이다 싶어 이번 12기 혼공단에 참여하게되었습니다.C언어는 오래된 언어다 보니 파이썬같은 최신 언어와 문법적인 부분에서 차이가 있어서 걱정이 앞섰는데,이번 기회를 통해 포인터 파트까지 공부할 수 있어 뜻깊은 방학이였습니다.

# data[].attributes.body
이런 기회 만들어주셔서 감사합니다~

다음에도 기회가 되면 다른 도서로 참여하겠습니다!

# data[].attributes.attachment_link.description
주간진도기본 숙제(필수)추가 숙제(선택)6주차(8/12~8/18)Ch.09포인터 개념 정리도전 실전 예제 풀기 유튜브 강의 : 혼자 공부하는 C언어 혼자 공부하는 C 언어[혼자 공부하는 C 언어]는 [이것이 C언어다]의 전면 개정판으로, 두 책의 독자 모두 이 강의를 참고하여 학습하실 수 있습니다. [혼자 공부하는 C 언어]는 [이것이 C언어다] 콘텐츠를 기반으로 기획www.youtube.com Ch.09 포인터9-1.

# data[].attributes.body
6주차입니다!!! 방학 내내 함께했는데 이제 좀 허전할 것 같아요 ㅜㅜ 다음 13기 모집 기다리고 있겠습니다!!

# data[].attributes.attachment_link.title
[혼공단12기] 혼자 공부하는 자바 6주차

# data[].attributes.attachment_link.description
6주차 노션우와 마지막까지 어떻게든 하긴 했네요(지각이지만,,)이번 주차처럼 마무리를 완벽하게 못한 주도 있고 조금은 얼렁뚱땅 공부를 한 적도 있어서 아쉽기도 합니다!하지만 일단 6주동안 포기하지 않고 끝까지 해냈다는 사실에 뿌듯합니다! 혼공단을 하는 저의 가장 큰 목

# data[].attributes.body
6주차 제출합니다. 감사합니다~ : )

# data[].attributes.body
수고하셨습니다! 다음에 또 만나면 좋겠습니다! 덕분에 여름 방학 알차게 보냈습니다~~

# data[].attributes.attachment_link.title
공부하는 토끼 : 네이버 블로그

# data[].attributes.body
마지막 주차...정리가 제대로 되지 읺았네요. 수정해서 완벽한 모습으로 해놓을거에요.. 족장님의 응원과 격려 덕분에 책 한권을 다 읽을 수 있었습니다. 포기하지 않을 수 있었습니다. 정말 감사합니다!!

# data[].attributes.attachment_link.readable_text
연속 메모리 할당

프로세스에 연속적인 메모리 공간을 할당하는 방식을 연속 메모리 할당 방식이라고 한다.

스와핑

메모리상의 빈 공간에 또 다른 프로세스를 적재하여 실행하는 방식을 스와핑 이라고 한다.

이 때 프로세스들이 쫓겨나는 보조기억장치의 일부 영역을 스왑 영역이라고 한다. 그리고 현재 실행되지 않는 프로세스가 메모리에서 스왑 영역으로 옮겨지는 것을 스왑 아웃, 반대로 스왑 영역에 있던 프로세스가 다시 메모리로 옮겨오는 것을 스왑 인 이라고 한다.

스와핑을 이요하면 프로세스들이 요구하는 메모리 주소 공간의 크기가 실제 메모리 크기보다 큰 경우에도 프로세스들을 동시 실행할 수 있다.

메모리 할당

비어있는 메모리 공간에 프로세스를 연속적으로 할당하는 방식을 알아보자. 여기에는 대표젹으로 최초 적합, 최적 적합, 최악 적합 이 있다.

최초적합

최초 적합은 운영체제가 메모리 내의 빈 공간을 순서대로 검색하가 적재할 수 있는 공간을 발견하면 그 공간에 프로세스를 배치하는 방식이다.

최적적합

최적적합은 운영체제가 빈 공간을 모두 검색해 본 후, 프로세스가 적재될 수 있는 공간 중 가장 작은 공간에 프로세스를 배치하는 방식이다.

최악 적합

최악 적합은 운영체제가 빈 공간을 모두 검색해 본 후, 프로세스가 적재될 수 있는 공간 중 가장 큰 공간에 프로세스를 배치하는 방식이다.

외부 단편화

연속 메모리 할당은 외부 단편화 라는 문제를 내포하고 있다. 외부 단편환느 프로세스들이 메모리에 연속적으로 할당되는 환경에서는 위와 같이 프로세스들이 실행되고 종료되기를 반복하며 메모리 사이 사이에 빈 공간들이 생긴다. 프로세스 바깥에 생기는 이러한 빈 공간들은 분명 빈 공간이지만 그 공간보다 큰 프로세스를 적재하기 어려운 상황을 초래하고, 결국 메모리 낭비로 이어지는 현상을 외부 단편화라고 한다.

외부 단편화를 해결할 수 있는 방안으로 메모리를 압축 하는 방법이 있다. 메모리 조각 모음이라고도 부른다. 압축은 여기저기 흩어져 있는 빈 공간들을 하나로 모으는 방식으로 메모리 내에 지정된 프로세스를 적당히 재배치 시켜 흩어져있는 작은 빈공간들을 하나의 큰 빈공간으로 만드는 것이다.

하지만 압축 방식은 여러 단점이 있고, 다른 해결방안으로 가상 메모리 기법 중 페이징 기업이 오늘날까지 사용되고 있다.

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

가상 메모리는 실행하고자 하는 프로그램을 일부만 메모리에 적재하여 실제 메모리 크기보다 더 큰 프로세스를 실행할수 있게 하는 기술이다. 가상 메모리 기법에는 크게 페이징과 세그맨테이션 이 있다.

페이징이란

만일 메모리와 프로세스를 일정한 단위로 자르고, 이를 메모리에 불연속적으로 할당할 수만 있다면 외부 단편화는 발생하지 않는다. 페이징은 프로세스의 논리 주소 공간을 페이지라는 일정한 단위로 자르고, 메모리 물리 주소 공간을 프레임 이라는 페이지와 동일한 크기의 일정한 단위로 자른 뒤 페이지를 프레임에 할당하는 가상 메모리 관리 기법이다.

페이징 시스템에서의 스왑 아웃은 페이지 아웃, 스왑인은 페이지 인 이라고 부르기도 한다.

페이지 테이블

프로세스가 메모리에 불연속적으로 배치되면 CPU입장에서 '다음에 실행할 명령어 위치'를 찾기 어려워진다. 이를 해결하기 위해 페이징 시스템은 프로세스가 물리 주소에 불연속적으로 배치되더라도 논리주소에는 연속적으로 배치되도록 페이지 테이블 을 이용한다.

페이지 테이블은 페이지 번호와 프레임 번호를 짝지어 주는 일종의 이정표이다. 다시 말해 현재 어떤 페이지가 어떤 프레임에 할당되었는지를 알려준다.

프로세스마다 각자의 페이지 테이블을 가지고 있고 각 프로세스의 페이지 테이블들은 메모리에 적재되어 있다. 그리고 CPU 내의 페이지 테이블 베이스 레지스터 는 각 프로스의 페이지 테이블이 적재된 주소를 가리키고 있다.

페이지 테이블을 메모리에 두면 메모리 접근시간이 늘어다는 문제를 해결하기 위해 CPU곁에 TLB라는 페이지 테이블의 캐시 메모리를 두고 페이지 테이블의 일부 내용을 저장한다. 참조 지역석에 근거해 주로 최근에 사용된 페이지 위주로 가져와 저장한다.

CPU가 발생한 논리 주소에 대한 페이지 번호가 TLB내에 있을 경우 이를 TLB 히트라고 한다. 하지만 만일 페이지 번호가 TLB에 없을 경우 어쩔 수 없이 페이지가 메모리 내의 페이지 테이블에 접근하는 경우를 TLB 미스 라고 한다.

페이징에서의 주소 변환

페이징 시스템에서는 모든 논리 주소가 기본적으로 페이지 번호와 변위 로 이루어져 있다.

페이지 번호는 말 그대로 접근하고자 하는 페이지 번호이다. 변위는 접근하려는 주소가 프레임의 시작 번지로부터 얼만큼 떨어져 있는지를 알기 위한 정보이다.

페이지 테이블 엔트리

페이지 테이블의 각각의 행들을 페이지 테이블 엔트리 라고한다. 페이지 테이블 엔트리에는 페이지 번호, 프레임 번호 뿐만이 아닌 유효 비트, 보호 비트, 참조 비트, 수정 비트가 담겨져 있다.

유효 비트

유효 비트는 현재 해당 페이지에 접근 가능한지 여부를 알려준다. 페이지가 메모리에 적재되어 있다면 유효 비트가 1, 그렇지 않다면 0이 된다. 만일 CPU가 유효 비트가 0인 메모리에 적재되어 있지 않는 페이지로 접근하면 페이지 폴트 라는 예외가 발생한다.

보호 비트

보호 비트는 페이지 보호 기능을 위해 존재한느 비트이다. 비트가 0일경우 이 페이지는 읽기만 가능한 페이지임을 나타내고, 1일 경우 읽고 쓰기가 모두 가능한 페이지임을 나타낸다.

참조 비트

참조 비트 는 CPU가 이 페이지에 접근한적이 있는지 여부를 나타낸다. 적재 이후 CPU가 읽거나 쓴 페이지는 참조 비트가 1로 세팅되고, 적재 이후 한 번도 읽거나 쓴 적이 없는 페이지는 0으로 유지된다.

수정 비트

수정 비트는 해당 페이지에 데이터를 쓴 적이 있는지 없는지 수정 여부를 알려준다. 더티 비트 라고도 부른다. 이 비트가 1이면 변경된 적이 있는 페이지, 0이면 변경된 적이 없는 페이지임을 나타낸다.

페이지 교체와 프레임 할당

운영체제는 프로세스들이 한정된 메모리를 효율적으로 이용할 수 있도록 불필요한 페이지를 선별하고, 프로세스들에 적절한 수의 프레임을 할당하여 페이지를 할당할 수 있게 하여야한다. 요구 페이징의 개녕과 페이지 교체 알고리즘, 그리고 프레임 할당에 대해 학습 해보자.

요구 페이징

처음부터 모든 페이지를 적재하지 않고 필요한 페이지만(페이지 폴트가 발생하면)을 메모리에 적재하는 기법

1. CPU가 특정 페이지에 접근하는 명령어 실행

2. 유효 비트가 1일 경우, CPU는 페이지가 적재된 프레임에 접근

3. 유효 비트가 0일 경우, 페이지 폴트 발생

4. 페이지 폴트 처리 루틴은 해당 페이지를 메모리를 적재하고 유효 비트를 1로 설정

5. 다시 1 번을 수행

요구 페이징 시스템이 안정적으로 작동하려면 필연적으로 다음 두가지를 해결해야 한다.

페이지 교체 알고리즘

좋은 알고리즘이란 무엇일까? '고른 페이지를 스왑 아웃 시켰을 때 페이지 폴트가 자주발생하는 것'은 좋지않은 알고리즘이다.

그렇기에 페이지 교체 알고리즘을 제대로 이해하려면 페이지 폴트 횟수를 알 수 있어야 한다. 이는 페이지 참조열 을 통해 알 수 있다. 페이지 참조열은 CPU가 참조하는 페이들 중 연속된 페이지를 생략한 페이지열을 의미한다.

FIFO 페이지 교체 알고리즘

메모리에 가장 먼저 올라온 페이지부터 내쫓는 방법이다. 가령 프로세스가 사용할수 있는 프레임이 세 개 있고, 페이지 참조열이 아래와 같다.
2 3 1 3 5 2 3 4 2 3
그렇다면 FIFO 페이지 교체 알고리즘은 네 번의 페이지 폴트가 발생한다. 페이지가 초기에 적재될 때 발생할 수 있는 페이지 폴트는 고려하지 않고, 적재된 페이지를 교체하기 위해 발생한 페이지 폴트만을 페이지 폴트로 간주했다.

구현은 간단하지만, 마냥 좋은 것은 아니다. 실행 초기에 적재되고 사용하지 않을 수도 있지만 내내 사용할 경우도 있을 수있다. 이런 페이지는 먼저 들어왔다고 내쫓으면 안되는 경우이다.

최적 페이지 교체 알고리즘

CPU에 의해 참조되는 횟수를 고려하는 페이지 교체 알고리즘이다. 앞으로의 사용 빈도가 가장 낮은 페이지를 교체하는 알고리즘을 페이지 교체 알고리즘으로 삼는것이 가장 합리적이고, 이 알고리즘이 최적 페이지 교체 알고리즘이다.
2 3 1 3 5 2 3 4 2 3
이 경우에 두 번의 페이지 폴트가 발생한다. 이 알고리즘은 이름 그대로 가장 낮은 페이지 폴트율을 보장한다. 하지만 실제 구현이 어렵다. 그 이유는 '앞으로 사용되지 않을 페이지'를 예측하기란 어렵고, 앞으로 어느 부분을 참조할지 미리 알기는 현실적으로 불가능에 가깝기 때문이다.

주로 다른 페이지 교체 알고리즘의 이론상 성능을 평가하기 위한 기준으로 사용된다.

LRU 페이지 교체 알고리즘

최적 페이지 교체 알고리즘을 조금 변형하여 가장 오랫동안 사용되지 '않은' 페이지를 교체하는 알고리즘이다.

LRU 페이지 교체 알고리즘은 '최근에 사용되지 않은 페이지는 앞으로도 사용되지 않을 것'이라는 아이디어를 토대로 만들어진 알고리즘이다. 페이지마다 마지막으로 사용한 시간을 토대로 최근에 가장 사용이 적었던 페이지를 교체한다.

파일과 디렉터리

파일과 디렉터리는 모두 운영체제 내부 파일 시스템이 관리하는 존재이다.

파일

하드 디스크나 SSD와 같은 보조기억장치에 저장된 관련 정보의 집합을 의미한다. 파일은 의미있고 관련 있는 정보를 모은 논리적 단위이다.

파일을 이루는 정보에는 이름과 파일을 실행하기 위한 정보, 그리고 파일 관련 부가 정보인 속성또는 메타데이터 가 있다.

파일 속성과 유형

대표적인 속성의 종류는 다음과 같다.

파일 속성 중 파일 유형은 운영체제가 인식하는 파일 종류를 나타낸다. 이를 알리기 위해 흔히 사용하는 방식은 확장자 를 이용한다.

파일 연산을 위한 시스템 호출

디렉터리

파일들을 일목요연하게 관리하기 위해 디렉터리를 이용할수 있다. 윈도우에서는 폴더 라고 부른다.

1단계 디렉터리 (single-level directory)는 옛날 운영체제의 형태로, 모든 파일이 하나의 디렉터리 아래에 있는 형태이다.

트리 구조 디렉터리 (tree-structured directory)는 최근 사용하는 거의 모든 운영체제의 형태로, 디렉터리 안에 또 다른 디렉터리가 존재할 수 있어 트리 구조를 이루는 형태. 이때 최상위 디렉터리는 루트 디렉터리라고 부르고 슬래시(/)로 표현한다. 하위 디렉터리는 서브 디렉터리 또는 자식 디렉터리라고 부른다.

미션

기본 문제

메모리 할당 방식에 대한 설명으로 올바른 것을 다음 보기에서 찾아 써 보세요.
(보기) 최초 적합, 최적 적합, 최악 적합

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

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

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

답 : 1 - 최초 적합, 2 - 최악 적합, 3 - 최적 적합

선택 문제

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

답 - 2 3 1 3 5일떄 2가 가장 사용안됐으므로 페이지 폴트가 발생, (현재 5 3 1) - 2 3 1 3 5 2일때 1이 가장 사용 하지 않았으므로 페이지 폴트 발생(현재 5 3 2) - 2 3 1 3 5 2 3 4 일때, 5를 가장 사용하지 않았으므로 페이지 폴트 발생 (현재 4 3 2)
총 3번의 페이지 폴트가 발생한다.

# data[].attributes.attachment_link.title
[혼공컴운] 6주차 - 가상 메모리, 파일시스템

# data[].attributes.attachment_link.description
프로세스에 연속적인 메모리 공간을 할당하는 방식을 연속 메모리 할당방식이라고 한다.메모리상의 빈 공간에 또 다른 프로세스를 적재하여 실행하는 방식을 스와핑이라고 한다.이 때 프로세스들이 쫓겨나는 보조기억장치의 일부 영역을 스왑 영역이라고 한다. 그리고 현재 실행되지 않

# data[].attributes.body
6-1

https://blog.naver.com/student_rabbit/223552263668

6-2

https://blog.naver.com/student_rabbit/223552329960

6주차 완료!

# data[].attributes.attachment_link.title
공부하는 토끼 : 네이버 블로그

# data[].attributes.body
혼공족장님 덕분에 지치지 않고 완주할 수 있었네요~~ 고맙습니다!!

https://fan-antlion-1bf.notion.site/6-18c4e45748994558a9d8f6f97606e402?pvs=4

# data[].attributes.body
6주차 제출입니다

# data[].attributes.attachment_link.title
이진 : 네이버 블로그

# data[].attributes.body
6주간 혼공족분들, 그리고 족장님(!!) 너무너무 수고하셨고 감사했습니다. 덕분에 2024년 여름을 한 단계 더 성장한 기억으로 채울 수 있었어요. 모두들, 고생하셨고 축하합니다!

# data[].attributes.attachment_link.title
[혼공컴운] 혼공학습단 12기를 마무리하며

# data[].attributes.attachment_link.description
안녕하세요! 어느덧 6주라는 (실질적으론 6주+방학1주=7주) 시간이 흘러혼공학습단 12기, 혼공컴운 회고록을 쓰고 있는 저의 모습이 조금은 낯설게 느껴지네요..! 문득 1주차에 제가 쓴 혼공학습단 참여 동기가 궁금해져서뭐라고 썼는지 다시 봤어요. ‘학과 수업에서 진행한 학습에 부족함을 느껴 처음부터 차근차근 공부하고 싶다.″어디가 미흡한지 파악이 잘 안 되어서 도서와 커리큘럼을 바탕으로 학습하고 싶다.’ 제가 이 프로그램에 참여한 가장 큰 동기 두 가지인데요,놀랍게도 저는 이 두 가지 모두를 이룬 것 같아요!사실 동기는 저렇게 잡았지만,제가 실제로 원하는 것들을 온전히 얻을 거라는 생각을 하진 못했거든요.사실 이렇게 기간을 두고 한 과목 학습을 시작해 본 적도, 완주해 본 적도 없어서원하는 목표…

# data[].attributes.body
제가 완주를 해낼 줄은 몰랐는데! 결국 마지막까지 함께하게 되어서 좋았습니다 (๑˃̵ᴗ˂̵)و

다같이 했기에 끈기가 부족한 저도 잘 마무리할 수 있었던 거 같아요. 모두 수고 많으셨어요!

# data[].attributes.body
[혼공머신]7-2 | ICE-ICE-BEAR-BLOG

[혼공머신]7-3 | ICE-ICE-BEAR-BLOG

7-1 확인문제

문제 1: 인공 신경망 파라미터 계산

인공 신경망에서 입력 특성이 100개이고, 밀집층의 뉴런 개수가 10개일 때, 각 입력 특성에는 각 뉴런에 대해 하나의 가중치가 있으므로 총 가중치는 100×10=1000100 \times 10 = 1000100×10=1000개입니다. 또한, 각 뉴런은 하나의 편향(bias)을 가집니다. 따라서 10개의 편향이 추가됩니다. 총 파라미터 개수는 가중치와 편향을 합쳐 1000+10=10101000 + 10 = 10101000+10=1010개입니다.

정답: 3) 1,010개

문제 2: 케라스의 Dense 클래스를 이용한 이진 분류 모델

이진 분류 문제에서 출력층의 활성화 함수로는 일반적으로 'sigmoid' 함수가 사용됩니다. 이 함수는 출력값을 0과 1 사이로 압축하여, 확률로 해석하기 적합하게 만듭니다.

정답: 2) ‘sigmoid’

문제 3: 케라스 모델 설정 메서드

케라스에서 모델의 손실 함수, 최적화 방법, 평가 지표 등을 설정하는 메서드는 compile()입니다.

정답: 4) compile ( )

문제 4: 다중 분류 문제의 손실 함수

정수 레이블을 사용하는 다중 분류 문제에서 케라스의 compile() 메서드에 사용할 적절한 손실 함수는 'sparse_categorical_crossentropy'입니다. 이 함수는 레이블이 정수 형태로 제공될 때 사용되며, 각 클래스에 대한 확률을 계산하여 손실을 측정합니다.

정답: 1) ‘sparse_categorical_crossentropy’

# data[].attributes.attachment_link.readable_text
인공 신경망
핵심 포인트:

인공 신경망(Artificial Neural Networks)은 생물학적 뉴런에서 영감을 받아 만든 머신러닝 알고리즘입니다. 하지만 실제 뇌를 모델링한 것은 아닙니다.

신경망은 이미지, 음성, 텍스트 처리와 같은 복잡한 문제에서 뛰어난 성능을 발휘하며, 종종 딥러닝(Deep Learning)이라고 불립니다.

코드 설명:
이 코드는 텐서플로에서 재현 가능한 결과를 얻기 위해 난수 시드를 설정합니다. 이는 실험을 반복할 때마다 같은 결과를 얻을 수 있게 도와줍니다.
추가 학습:

신경망의 기본 구조 (입력층, 은닉층, 출력층)와 뉴런 간의 연결 방식에 대해 학습합니다.

활성화 함수(Activation Function)와 그 중요성에 대해 깊이 이해합니다. 예: ReLU, Sigmoid, Softmax 등.

패션 MNIST
핵심 포인트:

패션 MNIST는 10가지 패션 제품 카테고리에 속한 28x28 크기의 흑백 이미지로 구성된 데이터셋입니다.

이 데이터셋은 기존 MNIST 손글씨 데이터셋보다 실제 문제를 더 잘 반영합니다.

코드 설명:
이 코드는 패션 MNIST 데이터를 로드하고, 학습용 및 테스트용 데이터의 형태를 출력합니다.

이 코드는 데이터셋의 이미지를 시각화하여 각 클래스의 예시를 제공합니다.
추가 학습:

Fashion MNIST 데이터셋의 각 클래스가 어떤 패션 아이템인지 이해합니다.

데이터 전처리 과정(예: 이미지 정규화, 데이터 증강)에 대해 학습합니다.

로지스틱 회귀로 패션 아이템 분류하기
핵심 포인트:
로지스틱 회귀(Logistic Regression)는 이진 분류를 위한 선형 모델입니다. 다중 클래스 분류를 위해 소프트맥스(Softmax) 함수를 사용하여 확장할 수 있습니다.
코드 설명:
이 코드는 이미지를 1차원 벡터로 변환하고, 픽셀 값을 0과 1 사이로 정규화합니다.

로지스틱 회귀 모델을 사용하여 패션 아이템을 분류합니다. 교차 검증을 통해 모델의 성능을 평가합니다.
추가 학습:

로지스틱 회귀의 수학적 배경과 소프트맥스 함수의 역할에 대해 학습합니다.

교차 검증(Cross-Validation)과 그 중요성에 대해 이해합니다.

인공신경망
핵심 포인트:

인공 신경망은 로지스틱 회귀보다 복잡한 모델로, 은닉층을 추가하여 비선형 문제를 해결할 수 있습니다.

텐서플로와 케라스는 신경망을 효율적으로 구축하고 훈련하기 위한 강력한 도구입니다.

코드 설명:
이 코드는 데이터를 훈련 세트와 검증 세트로 분할하여 모델의 성능을 검증합니다.
추가 학습:

케라스의 Sequential 모델 구조와 각 층의 역할에 대해 학습합니다.

딥러닝에서 과적합(Overfitting) 문제와 이를 해결하기 위한 방법(예: 드롭아웃, 정규화)들을 이해합니다.

인공신경망 모델 만들기
핵심 포인트:

케라스의 Dense 층은 기본적인 밀집층으로, 모든 뉴런이 완전히 연결된 상태를 의미합니다.

출력층에서 소프트맥스 함수를 사용하여 클래스별 확률을 출력합니다.

코드 설명:
이 코드는 간단한 신경망 모델을 정의하고 컴파일합니다. 입력은 784개의 픽셀(28x28 이미지), 출력은 10개의 클래스 확률입니다.
추가 학습:

손실 함수와 최적화 알고리즘(예: Adam, SGD)의 역할에 대해 학습합니다.

모델 컴파일 과정에서 사용되는 각 매개변수의 의미를 이해합니다.

인공 신경망으로 패션 아이템 분류하기
핵심 포인트:
모델 훈련은 데이터를 통해 모델의 가중치를 업데이트하는 과정이며, 평가 단계에서는 새로운 데이터에 대한 모델의 성능을 확인합니다.
코드 설명:
이 코드는 모델을 훈련시키고 검증 세트를 통해 모델의 성능을 평가합니다.
추가 학습:

에포크(Epoch)와 배치 크기(Batch Size)의 의미와 그 설정 방법에 대해 학습합니다.

모델 성능을 평가하는 다양한 지표(예: 정확도, 손실 값)를 이해하고, 이들을 개선하기 위한 방법들을 탐색합니다.

# data[].attributes.body
6주차 제출합니다!

# data[].attributes.attachment_link.title
몽쉘통통 고양이님의블로그 : 네이버 블로그

# data[].attributes.body
6주차 제출합니다~~!!

# data[].attributes.body
https://www.instagram.com/p/C-0MQfIyz9d/?igsh=aW1yNzZjdDU3bjB0

재밌었어용

# data[].attributes.attachment_link.title
게임 on Instagram: "#혼공단
#혼공프로
약간총정리느낌
어렵지 않게 이해할 수 있었당"

# data[].attributes.attachment_link.description
0 likes, 0 comments - wjwjjwd.p on August 18, 2024: "#혼공단
#혼공프로
약간총정리느낌
어렵지 않게 이해할 수 있었당". 

# data[].attributes.attachment_link.embed_code
View this post on Instagram

A post shared by 게임 (@wjwjjwd.p)

# data[].attributes.body
회고록 제출합니다!

# data[].attributes.attachment_link.readable_text
한빛 미디어-혼자 공부하는 R 데이터 분석

이 책으로 공부한 혼공단 12기 활동 후기 입니다!

저는 이번 기수에 처음 활동을 하게 되었습니다.

종강 직후에 알찬 방학을 위한 리스트를 짜다가 책장에 꽂혀있는 R 책(위)을 보고

R 코드가 헷갈리니 이번 기회에 헷갈리는 걸 정리하자 싶어서 활동하게 되었습니다

마침 자료 받으려고 한빛미디어 사이트 들어갔는데 혼공학습단 게시글이 보여서 구경하다가 마침 모집중이라 냅다 신청하였습니다.

랩실 생활하면서 여러 프로그래밍 언어를 쓰다보면 마치 다중언어를 사용하는 사람이 언어를 헷갈려 하는 것처럼 잘못 쓸 때가 종종 있거든요.. R 쓰다가 리눅스 명령어 치면서 파일 소환하려 한 사람입니다

마침 자료 받으려고 한빛미디어 사이트 들어갔는데 혼공학습단 게시글이 보여서 구경하다가 마침 모집중이라 냅다 신청 하였습니다.

여기까지가 활동하게 된 계기였습니다!

스터디 커리큘럼은 다음과 같습니다.

심플하게 챕터 1개를 일주일씩 공부하면 되고 2주차까지는 분량도 짧아서 진도 빼기가 수월했습니다.

사실 누구나 혼자서 알아서 척 척 공부하면 얼마나 쉬울까요?

그게 말만 쉽지 실천은 어려우니까 같이 하는 사람과 하라고 이끌어주는 사람이 있으면 좋습니다.

디스코드 채널로 소통을 할 수 있었고 열심히 하면 우수 혼공족에도 선정되어서 간식 선물도 왕창 받을 수 있다는 점이 좋았습니다.

이왕 할 거 동기부여도 챙기고 간식도 받으니까 좋네요! 이런 장점들이 제가 6주 동안 열심히 스터디했던 원동력이라고 생각합니다.

# data[].attributes.attachment_link.title
혼공학습단 12기 활동 회고록(혼공R이)

# data[].attributes.attachment_link.description
한빛 미디어-혼자 공부하는 R 데이터 분석이 책으로 공부한 혼공단 12기 활동 후기 입니다! 활동계기 저는 이번 기수에 처음 활동을 하게 되었습니다.종강 직후에 알찬 방학을 위한 리스트를 짜다가 책장에 꽂혀있는 R 책(위)을 보고R 코드가 헷갈리니 이번 기회에 헷갈리는 걸 정리하자 싶어서 활동하게 되었습니다마침 자료 받으려고 한빛미디어 사이트 들어갔는데 혼공학습단 게시글이 보여서 구경하다가 마침 모집중이라 냅다 신청하였습니다.랩실 생활하면서 여러 프로그래밍 언어를 쓰다보면 마치 다중언어를 사용하는 사람이 언어를 헷갈려 하는 것처럼 잘못 쓸 때가 종종 있거든요..

# data[].attributes.body
히히~ 6주차 완료

# data[].attributes.body
12기 혼공학습단 여러분과 혼공족장님께 무한한 감사와 사랑을 드립니다! 다들 수고하셨습니다🫶🫶

# data[].attributes.attachment_link.title
대학생 일기 : 네이버 블로그

# data[].attributes.body
전공교수님도 못해내신걸 혼공학습단이

# data[].attributes.body
6주차 학습 제출합니다!

족장님과 혼공학습단 분들 모두 고생 많으셨어요!!

# data[].attributes.attachment_link.description
챕터 6은 ggplot2 패키지로 데이터 시각화하는 방법에 대해서 다룬다. 여기서 말하는 데이터 시각화란, 수치 데이터를 누구나 쉽게 이해할 수 있도록 이미지로 나타내는 것을 뜻한다. ggplot2 패키지는 R의 대표적인 데이터 시각화 패키지로, ggplot() 함수를 이용해서 기본적인 그래프 틀을 만들고 다양한 이미지 객처 레이어를 추가해서 겹치게 하는 방식으로 그래프를 그릴 수 있다! 표1. ggplot2 패키지의 함수 정리함수이름geom_point()산점도 그래프geom_line()선 그래프geom_bar()막대 그래프[누적: aes() 함수 추가, 선바스트: 누적에 coor_polar() 함수 추가]geom_boxplot()상자 그림geom_histogram()히스토그램 기본숙제p.288의 실습…

# data[].attributes.body
6주차 제출합니다.

# data[].attributes.attachment_link.readable_text
이번 주차는

▶ Chapter 14 가상 메모리

▶ Chapter 15 파일 시스템에 대해 알아보자.

우리는 지금까지 메모리에 프로세스들이 연속적으로 배치되는 상황을 가정했다. 하지만 메모리에 적재된 프로세스들 중에 현재 실행되지 않는 프로세스 도 존재한다.

이렇게 사용하지 않는 프로세스들을 임시로 보조기억장치 일부 영역인 스왑 영역으로 쫓아내고, 그렇게 해서 생긴 메모리의빈 공간에 또 다른 프로세스를 적재하여 실행하는 방식을 스와핑 이라고 한다.

- 스왑 아웃 : 실행되지 않는 프로세스가 메모리에서 스왑 영역으로 옮겨지는 것

- 스왑 인 : 스왑 영역에 있던 프로세스가 다시 메모리로 옮겨오는 것

* 여기서 스왑 아웃되기 전의 물리 주소와는 다른 주소에 적재될 수도 있다.

비어 있는 메모리 공간에 프로세스를 연속적으로 할당하는 방법 을 살펴보자. 대표적으로 3가지 방식이 있다.

1. 최초 적합 : 운영체제가 메모리 내의 빈 공간을 순서대로 검색하다가 적재할수 있는 공간을 발견하면 그 공간에 프로세스를 배치하는 방식이다. 검색을 최소화하고 빠른 할당이 가능하다.

2. 최적 적합 : 운영체제가 빈 공간을 모두 탐색해 본 후, 적재될 수 있는 공간 중 가장 작은 공간에 프로세스를 배치하는 방식이다.

3. 최악 적합 : 운영체제가 빈 공간을 모두 탐색해 본 후, 적재될 수 있는 공간 중 가장 큰 공간에 프로세스를 배치하는 방식이다.

프로세스들을 이렇게 연속적으로 할당하다 보면, 프로세스를 할당하기 어려울 만큼 작은 메모리 공간들로 인해 메모리가 낭비되는 현상이 발생한다. 이를 외부 단편화 라고 한다.

이를 해결할 수 있는 대표적인 방안으로 메모리 압축 이 있다.

메모리 내에 저장된 프로세스를 적당히 재배치시켜 흩어져 있는 빈 공간들을 하나의 큰 빈 공간으로 만드는 방법인데 이렇게 모으는동안 시스템은 하던 일을 중지해야하고 메모리에 있는 내용을 옮기면서 많은 오버헤드를 야기한다는 문제가 있다.

압축 방법 외에도 이러한 외부 단편화 문제를 해결하는 방법이 있다.

페이징 기법 이라고 하는데, 이를 이용하면 물리 메모리보다 큰 프로세스를 실행할 수도 있다.

이렇게 실행하고자 하는 프로그램을 일부만 메모리에 적재해서 실제 물리 메모리 크기보다 더 큰 프로세스를 실행할 수 있게 하는 기술을 가상 메모리 라고 한다. 가상 메모리 관리 기법에는 페이징과 세그멘테이션이 있다.

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

페이징에서도 스와핑을 사용할 수 있는데 페이지 단위로 이루어진다. 페이징 시스템에서 스왑 아웃은 페이지 아웃, 스왑 인은 페이지 인 이라고 한다.

* 페이징은 외부 단편화 문제를 해결할 수 있지만 모든 프로세스가 페이지 크기에 딱 맞게 잘리는 것이 아니므로 여기서 발생하는 메모리 낭비를 내부 단편화 라고 한다. 만약 하나의 페이지 크기를 너무 작게 설정하면 그만큼 페이지 테이블의 크기도 커지기 때문에 메모리 내 페이지 테이블이 차지하는 공간이 낭비된다. 따라서 이를 방지하기 위해 너무 크지 않은 페이지 테이블이 만들어지도록 페이지의 크기를 조정하는 것이 중요하다.

=> 결론적으로 페이징의 논리는 한 프로세스를 실행하기 위해 프로세스 전체가 메모리에 적재될 필요가 없는 것이다.

이러한 방법에 문제가 있는데 프로세스가 메모리에 불연속적으로 배칙되면 CPU 입장에서 다음에 실행할 명령어 위치를 찾기가 어려워진다. 이를 해결하기 위해 페이징 시스템은 페이지 테이블 을 제공한다. 프로세스가 실제 메모리 주소인 물리 주소에 불연속적으로 배치되더라도 CPU가 바라보는 논리 주소에는 연속적으로 배치된 것처럼 보이게 한다.

프로세스마다 각자의 이러한 페이지 테이블을 가지고 있고 이들은 메모리에 적재되어 있다. 그리고 각 프로세스의 페이지 테이블이 적재된 주소를 가리키고 있는 것은 CPU 내 페이지 테이블 베이스 레지스터 이다.

페이지 테이블을 메모리에 두면 메모리 접근 시간이 2배로 늘어나기 때문에 CPU 옆에 TLB 라는 페이지 테이블의 캐시 메모리를 둬서 해결한다. 캐시 히트/미스와 마찬가지로 TLB 히트/미스가 있다.

하나의 페이지 혹은 프레임은 여러 주소를 포괄하고 있다. 따라서 특정 주소에 접근하려면 2가지 정보가 필요하다.

1. 어떤 페이지 혹은 프레임에 접근하고 싶은지

2. 접근하려는 주소가 그 페이지 혹은 프레임으로부터 얼마나 떨어져 있는지

그렇기 때문에 모든 논리 주소가 아래와 같이 구성된다.

페이지 테이블에 대해 자세히 알아보자.

페이지 테이블의 각 행들을 페이지 테이블 엔트리 라고 한다. 여기에는 페이지 번호, 프레임번호 뿐만 아니라 유효비트, 보호 비트, 참조 비트, 수정 비트 등의 정보들도 있다.

- 유효 비트 : 현재 해당 페이지에 접근 가능한지 여부를 알려준다. 현재 페이지가 메모리에 적재되어 있는지 아니면 보조기억장치에 있는지를 알려주는 비트다. 유효 비트가 0인 메모리에 적재되어 있지 않은페이지로 접근하려고 하면 페이지 폴트 라는 exception이 발생한다. 페이지 폴트를 처리하는 과정은 하드웨어 인터럽트 처리 과정과 유사하다.

- 보호 비트 : 페이지 보호 기능을 위해 존재하는 비트이다. Read, Write, eXecute 권한의 조합을 나타낼 수 있다.

- 참조비트 : CPU가 해당 페이지에접근한적이 있는지 여부를 나타낸다.

- 수정 비트 : 해당 페이지에데이터를 쓴 적이 있는지 없는지 수정 여부를 알려준다. CPU는 메모리에 값을 쓰기도 하는데 페이지가 메모리에서 사라질 때 보조기억장치에 쓰기 작업을 해야 하는지, 할 필요가 없는지 판단하기 위해 존재한다.

프로세스를 메모리에 적재할 때 처음부터 모든 페이지를 적재하지 않고 필요한 페이지만 메모리에 적재하는 기법을 요구 페이징 이라고 한다.

그렇다면 적재하지 않을 페이지, 메모리에서 쫓아낼 페이지를 어떻게 선별할까?

메모리에서 쫓아낼 페이지를 결정하는 방법을 페이지 교체 알고리즘 이라고 한다.

페이지 폴트가 자주 발생하지 않는다면컴퓨터의 성능 저하를 방지하는 좋은 알고리즘이 될 수 있다.

여기서 우리는 페이지 폴트 횟수를 알아야 한다. 이는 페이지 참조열 을 통해 알 수 있는데 CPU가 참조하는 페이지들 중 연속된 페이지를 생략한 페이지열을 의미한다.

이러한 페이지 참조열을 바탕으로 페이지 교체 알고리즘의 성능을 평가할수 있다.

1. FIFO 페이지 교체 알고리즘 : 메모리에 가장 먼저올라온 페이지부터 내쫓는 방식이다.

2. 최적 페이지 교체 알고리즘 : CPU에 의해 참조되는 횟수를 고려하는 페이지 교체 알고리즘이다. 내보내야 할 페이지를 앞으로 사용 빈도가 가장 낮은 페이지로 설정한다. 하지만 이는 구현이 어렵다. 왜냐하면 가장 오랫동안 사용되지 "않을" 페이지를 예상해야하기 때문이다.

3. LRU 페이지 교체 알고리즘 : 가장 오랫동안 사용되지 "않은" 페이지를 교체하는 알고리즘은 구현 가능하다. 최근에 사용되지않은 페이지는 앞으로도 사용되지 않을 것이라는 것을 전제로 구현된다.

프로세스가 실제 실행되는 시간보다 페이징에 더 많은 시간을 소요하여 성능이 저해되는 문제를 스래싱 이라고한다.

근본적인 원인은 각프로세스가 필요로 하는 최소한의프레임 수가 보장되지 않았기 때문이다. 따라서 운영체제는 프로세스들이 무리 없이 실행하기 위한 최소한의 프레임 수를 파악하고 적절한 수만큼 프레임을 할당해 줄 수 있어야 한다.

그렇다면 프레임 할당 방식 을 알아보자.

[ 정적 할당 방식 ]

1. 균등 할당 : 모든 프로세스에 균등하게 프레임을 제공하는 방식

2. 비례 할당 : 프로세스의 크기가 크면 프레임을 많이 할당하고 프로세스 크기가 작으면 프레임을 적게 나눠주는 방식

[ 동적 할당 방식 ]

1. 작업 집합 모델 : CPU가 특정 시간 동안 주로 참조한 페이지 개수만큼만 프레임을 할당하는 방식, 실행 주인 프로세스가 일정 시간 동안 참조한 페이지의 집합을 작업 집합이라고 한다.

2. 페이지 폴트 빈도 : 페이지 폴트율에 상한선과 하한선을 정하고 해당 범위 안에서만 프레임을 할당하는 방식

# data[].attributes.attachment_link.title
[혼공컴운] 6주차 | 가상 메모리, 파일 시스템

# data[].attributes.attachment_link.description
이번 주차는▶ Chapter 14 가상 메모리▶ Chapter 15 파일 시스템에 대해 알아보자.먼저 Chapter 14 가상 메모리에 대해 알아보자. 우리는 지금까지 메모리에 프로세스들이 연속적으로 배치되는 상황을 가정했다. 하지만 메모리에 적재된 프로세스들 중에 현재 실행되지 않는 프로세스도 존재한다. 이렇게 사용하지 않는 프로세스들을 임시로 보조기억장치 일부 영역인 스왑 영역으로 쫓아내고, 그렇게 해서 생긴 메모리의빈 공간에 또 다른 프로세스를 적재하여 실행하는 방식을 스와핑이라고 한다.

# data[].attributes.body
마지막이네요. 마지막이자 시작입니다. 저는 다시 3주차로 돌아가야 할 것 같네요ㅎㅎ..같이 혼공학습단 12기 진행했던 분들 모두 고생하셨구요 앞으로도 화이팅입니다!! 족장님도 그동안 고생 많으셨습니다~

# data[].attributes.body
벌써 마지막 주차로 제출하는 것도 오늘이 마지막이네요 ㅠㅠ 다들 그동안 고생 많으셨습니다!

# data[].attributes.attachment_link.readable_text
- 기본 숙제

p.486 10-2 확인 문제 2번 풀고 과정 설명하기

정답은 4번, 예외를 떠넘기기 위해 사용하는 것이지 새로운 예외를 발생시키기 위해 사용되는 것은 아니다.

- 추가 숙제

java.lang 패키지에 속하는 주요 클래스와 용도를 정리해서 포스팅하기

10. 예외처리

10 - 1 예외 클래스

기계로 인해 발생하는 문제는 에러(error), 사람이 하는 실수는 예외(exception).

예외에는 두 종류가 있는데 일반 예외와 실행 예외가 있다.

일반 예외(exception) : 컴파일러 체크 예의라고도 한다. 프로그램 실행 시 예외가 발생할 확률이 높기 때문에 컴파일러 과정에서 예외처리 코드가 있는지 검사한다.

실행 예외(runtime exception) : 컴파일러 넌 체크 예외라고도 한다. 실행 시 예측할 수 없이 갑자기 발생하기 때문에 예외 처리 코드 검사는 하지 않는다.

자바는 예외를 클래스로 관리한다. JVM은 프로그램을 실행하는 도중에 예외가 발생하면 해당 예외 클래스로 객체 생성 후 예외처리(exception handling) 코드에서 예외 객체를 이용할 수 있도록 해준다. 모든 예외 클래스는 다음과 같이 java.lang.Exception 클래스를 상속받는다.

일반 예외

실행 예외

일반 예외와 실행 예외 클래스는 RuntimeException을 기준으로 구별한다. RuntimeException의 하위 클래스가 아니면 일반 클래스이고, 하위클래스라면 실행 예외 클래스이다. 클래스 상속 관계에서 부모(조상)에 RuntimeException이 있다면 실행 예외 클래스이다.

실행 예외는 자바 컴파일러가 체크하지 않기 때문에 오로지 개발자의 경험에 의해 예외처리코드를 작성해야 한다. 만약 실행 예외에 대해 예외처리 코드를 넣지 않는다면, 해당 예외가 발생했을 때 프로그램은 곧바로 종료된다.

- NullPointerException

객체 참조가 없는 상태로, 즉 null 값을 갖는 참조 변수로 객체 접근 연산자인 도트(.)를 사용했을 때 발생한다. 객체가 없는 상태에서 객체를 사용하려 했으니 예외가 발생된다.

- ArrayIndexOutOfBoundsException

배열에서 인덱스 범위를 초과할 경우 발생한다. 배열값을 읽기 전에 배열의 길이를 먼저 조사하며 보완할 수 있다. 실행 매개값이 없거나 부족할 경우 조건문을 이용해 사용자에게 알려준다.

- NumberFormatException

문자열로 되어있는 데이터를 숫자로 변경하는 경우 Interger와 Double은 포장(Wrapper) 클래스라 하고, 포장 클래스의 정적 메소드인 parseXXX() 메소드를 이용하면 변환할 수 있다. 이 메소드들은 매개값이 문자열이 숫자로 변환할 수 있다면 숫자를 리턴 하지만, 숫자로 변환할 수 없다면 예외가 발생한다.

- ClassCastException

타입 변환을 뜻하는 casting을 보아 클래스는 다른 타입으로 변환할 수 없는데 그럴 경우에 발생하는 예외라 볼 수 있다. 타입 변환은 상위 클래스와 하위 클래스 간(= 상속 관계)에 발생하고, 구현 클래스와 인터페이스 간(= 구현 관계)에도 발생한다. 이러한 관계가 아니라면 다른 타입으로 변환되지 않는다.

-> 대입된 객체가 아닌 다른 클래스 타입으로 타입 변환하면 발생한다. 이 예외를 발생시키지 않으려면 instanceof 연산자로 타입 변환 전에 타입 변환이 가능한지 확인하는 게 좋다. 연산의 결과가 true라면 좌항 객체를 우항 타입으로 변환 가능하다. ex) ( animal instanceof Dog )라면 animal이 Dog로 변환 가능한지 확인하고 변환한다.

- 확인 문제

10 - 2 예외 처리

예외 처리 : 프로그램에서 예외가 발생했을 경우 프로그램의 갑작스러운 종료를 막고, 정상 실행을 유지할 수 있도록 처리하는 것이다.

자바 컴파일러는 소스 파일을 컴파일할 때 일반 예외가 발생할 가능성이 있는 코드를 발견하면 컴파일 에러를 발생시켜 개발자가 강제적으로 예외처리 코드를 작성하도록 요구하는데 반해. 실행 예외는 컴파일러가 체크해주지 않기 때문에 개발자의 경험을 바탕으로 예외 처리 코드를 작성해야 한다.

예외 -> 컴파일러 -> RuntimeException 라면 통과(실행예외니까)

-> RuntimeException이 아닌 경우는 검사.

- 예외 처리 코드 방법

- try-catch-finally 블록 은 생성자 내부와 메소드 내부에서 작성되어 일반 예외와 실행 예외가 발생할 경우 예외 처리할 수 있도록 해준다.

try { 예외 발생 코드 } catch(예외클래스 e) { 예외 처리 } finally { 항상 실행; }

예외가 발생한다면 즉시 실행을 멈추고 catch 블록으로 이동해 예외 처리 코드 실행한다. 그리고 finally 블록을 실행한다.

예외가 발생하지 않는다면 catch문 실행하지 않고 finally 블록의 코드를 실행한다.

finally 블록은 생략 가능하다. 예외 발생 여부와 상관없이 항상 실행할 내용이 있을 경우에만 작성한다. 심지어 try블록과 catch 블록에서 return문을 사용하더라도 finally 블록은 항상 실행된다.

이클립스는 일반 예외가 발생할 가능성이 있는 코드가 있다면 빨간 밑줄을 그어 예외처리 코드의 필요성을 알려준다. 빨간 밑줄에 마우스 포인터를 가져다 놓으면 Unhandledexception(처리되지 않은 예외) 정보를 알 수 있다.

Class.forName() 메소드는 매개값으로 주어진 클래스가 존재하면 class 객체를 리턴 하지만, 존재하지 않으면 ClassNotFoundException 발생한다. ClassNotFoundException은 일반 예외이므로 컴파일러는 개발자에게 예외처리코드를 작성하도록 요구한다.

- 다중 catch

발생하는 예외별로 예외 처리 코드를 다르게 하는 다중 catch 블록을 가질 수 있다. 다중 catch문 작성 시 주의할 점은 상위 예외 클래스가 하위 예외 클래스보다 아래에 위치해야 한다. 하위 예외는 상위 예외를 상속했기 때문에 상위 예외 타입도 되기 때문이다. 그래서 구별을 위해 구체적인 예외인 하위 예외 클래스를 먼저 작성하고, 그다음에 그 이후의 모든 예외를 포함하는 상위 예외 클래스로 작성해야 한다. 발생되는 예외별로 예외 처리 코드를 다르게 하기 위해서
- 예외 떠넘기기
메소드를 호출한 곳으로 예외 떠넘기기. 이때 사용하는 키워드가 throws. throws는 메소드 선언부 끝에 작성되어 메소드에서 처리하지 않은 예외를 호출한 곳으로 떠넘기는 역할. throws 키워드 뒤에는 떠넘길 예외 클래스를 쉼표로 구분해 나열해 주면 된다.

리턴타입 메소드이름(매개변수, ...) throws 예외클래스1, 예외 클래스2, ... { }

발생할 수 있는 예외의 종류별로 throws 뒤에 나열하는 것이 일반적이지만, 다음과 같이 throws Exception 만으로 모든 예외를 떠넘길 수도 있다.

리턴타입 메소드이름(매개변수, ...) throws Exception { }

throws 키워드가 붙은 메소드는 반드시 try 블록 내에서 호출되어야 한다. 그리고 catch 블록에서 떠넘겨 받은 예외를 처리해야 한다.

- 확인문제

# data[].attributes.attachment_link.description
기본 숙제p.486 10-2 확인 문제 2번 풀고 과정 설명하기정답은 4번, 예외를 떠넘기기 위해 사용하는 것이지 새로운 예외를 발생시키기 위해 사용되는 것은 아니다.- 추가 숙제java.lang 패키지에 속하는 주요 클래스와 용도를 정리해서 포스팅하기 10. 예외처리 10 - 1 예외 클래스기계로 인해 발생하는 문제는 에러(error), 사람이 하는 실수는 예외(exception).예외에는 두 종류가 있는데 일반 예외와 실행 예외가 있다.일반 예외(exception) : 컴파일러 체크 예의라고도 한다.

# data[].attributes.body
5주차 제출물 수정하느라 6주차도 우선 기본미션만 내게 되었네요 ㅠㅠ 빠르게 수정하고 꼭 회고도 쓰겠습니다..!

# data[].attributes.attachment_link.readable_text
한 번 밀리니까 진도 잡는게 너무 어렵다. 마지막 주여서 다행이다 너무 아쉽다... 일단 기본 미션만 진행하고, 빠른 시일내에 내용 정리도 업데이트 할 예정이다.

USE market_db ; CREATE TABLE singer ( SELECT mem_id , mem_name , mem_number , addr FROM member ); CREATE TABLE backup_singer ( mem_id CHAR ( 8 ) NOT NULL , mem_name VARCHAR ( 10 ) NOT NULL , mem_number INT NOT NULL , addr CHAR ( 2 ) NOT NULL , modType CHAR ( 2 ), modDate DATE , modUser VARCHAR ( 30 ) ); DROP TRIGGER IF EXISTS singer_updateTrg ; DELIMITER $$ CREATE TRIGGER singer_updateTrg AFTER UPDATE ON singer FOR EACH ROW BEGIN INSERT INTO backup_singer VALUES ( OLD . mem_id , OLD . mem_name , OLD . mem_number , OLD . addr , '수정' , CURDATE (), CURRENT_USER () ); END $$ DELIMITER ; DROP TRIGGER IF EXISTS singer_deLeteirg ; DELIMITER $$ CREATE TRIGGER singer_deleteTrg AFTER DELETE ON singer FOR EACH ROW BEGIN INSERT INTO backup_singer VALUES ( OLD . mem_id , OLD . mem_name , OLD . mem_number , OLD . addr , '삭제' , CURDATE (), CURRENT_USER () ); END $$ DELIMITER ;

위와 같이 트리거를 만드는 쿼리를 실행 시킨 후

UPDATE singer SET addr = '영국' WHERE mem_id = 'BLK' ; DELETE FROM singer WHERE mem_number >= 7 ; SELECT * FROM backup_singer ;

트리거가 잘 동작하는지 확인해보기 위해 위와 같은 쿼리를 실행시켰을 때 아래와 같은 오류가 발생했다.

Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect.

안전 모드를 사용중이라서 WHERE 절에서 Key Column을 특정하지 않고 여러 개의 Column을 한 번에 UPDATE/DELETE 하려고 하면 막힌다. 아래와 같이 에러로그를 따라가 아래 설정을 끄게 되면 정상 동작을 확인할 수 있다.

내용 정리도 빠른 시일내에 해야지...

Previous Next

# data[].attributes.attachment_link.title
[혼공S] 6주차 - 스토어드 프로시저 & 파이썬 연결

# data[].attributes.body
드디어 마무리, 6주차 학습을 완료하였습니다! 족장님, 그리고 모든 학습자분들 수고하셨어요:) 이번 여름 모두들 한단계 더 성장하셨네요!

# data[].attributes.attachment_link.readable_text
마음에 쏙 든 8월 짤과 함께 시작해보는 6주차 기록

안녕하세요~! 오늘은 특별히 다른 혼공컴운 학습주차보다 더 밝고 홀가분한 마음이네요! 캬캬

네!!! 드디어 이번 여름 혼공학습단 12기 마지막 학습 주차를 맞이했어요, 와~!!

항상 안 올 것 같은 마지막을 맞이하는 마음은 꽤나 설레고, 시원섭섭하네요.

이번 학습주간에는 운영체제의 페이지 교체 알고리즘과 파일 시스템에 대해 중점적으로 학습했는데요, 마지막 주차인 만큼 꽤나 양이 방대하고 중요하게 느껴졌지만 끝끝내 해낸 스스로에게 박수를 보내며 이번 6주차 학습 기록도 힘차게 남겨보아요~ 아좌좌~!!

이번 혼공컴운 6주차의 숙제는 뭐였을까요?

(기본숙제) p. 400의 확인 문제 1번 풀고 인증하기

프로세스를 실행하기 위해 보조기억장치 -> 메모리로 프로세스가 이동될 때, 메모리(프레임)에 프로세스를 어떻게 할당할 것인가에 대한 학습을 진행했습니다.

저번에 교착 상태를 방지하기 위한 알고리즘 학습법을 기록하면서도 언급했지만, 교착 상태 이후로 학습한 운영체제에 대한 내용이 막연히 어렵게만 느껴졌기 때문에 이번 학습을 진행하면서 내가 어려워했던 부분이었다는 것을 빠르게 떠올리고 학습에 더욱 집중하여 공부를 진행했던 기억이 떠오릅니다 ㅎㅎ

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

사실 이 숙제를 접하고는 '엇, 이거 책에서 여러 번 풀어본 문제인데?' 라는 생각이 확 들었습니다. 그만큼 책에서 연습할 때 제가 집중해서 풀었다는 거겠죠? ㅎㅎㅎ 그래도 다시 한번 블로그에 글로 정리하면서 LRU 알고리즘 개념을 더 단단히 다져볼게요.

1. 우선 문제에서 말하는 페이지 폴트의 기준은 초기 프레임 할당(여기 문제에서는 3회네요)에서 발생하는 페이지 폴트는 제외하고 이후에 발생하는 페이지 폴트를 기준으로 한다고 했습니다.

따라서 처음 2,3,1 할당은 기본 세팅으로 간주하여 프레임에 2,3,1이 할당된 상태로 시작합니다.

2. 이때 LRU 알고리즘을 떠올려보면, 할당된 페이지가 마지막으로 실행된 시간을 비교하여 해당 시간이 가장 오래된 페이지를 스와핑하는 알고리즘이라는 것을 기억할 수 있습니다.

처음에 이것만 보면 FIFO 알고리즘과 헷갈릴 수도 있는데(왜냐면 제가 그랬거든요), FIFO는 마지막 실행시간이 아닌, 페이지 첫 할당시간을 비교하여 가장 오래된 페이지를, LRU는 페이지 마지막 실행시간으로 스왑 아웃(페이지 아웃) 한다는 점에서 차이를 가집니다.

3. 계속 문제를 따라가서, 주어진 페이지 참조열은 '2313523423' 이기 때문에, 4번째 페이지 3은 페이지 히트, 5는 할당된 프레임이 없어 페이지 폴트(1회)가 되고 LRU 알고리즘 기준 페이지 2가 스왑 아웃됩니다.

현재 프레임은 5,3,1 페이지에 할당되고 있는 것이지요.

4. 6번째 페이지 2는 페이지 폴트(2회)가 되고 LRU 알고리즘 기준 페이지 1이 스왑 아웃되어 프레임은 페이지 5,3,2에 할당됩니다.

7번째 페이지 3은 페이지 히트, 8번째 페이지 4는 페이지 폴트(3회)로 LRU 알고리즘 기준 페이지 5와 스와핑되어 프레임은 페이지 4,3,2에 할당됩니다.

5. 9번째 페이지 2와 마지막 10번째 페이지 3은 모두 페이지 히트하여 최종적으로 위 페이지 참조열은 총 3회의 페이지 폴트를 갖게 됩니다!!

후 이렇게 글로 적어 설명하다 보니 확실히 이해도 더 잘 되고 알고리즘 푸는(?) 요령도 생기는 게 느껴지네요 ㅎㅎ

이런 식으로 14장에서는 페이지 교체 알고리즘에 대해 중점적으로 학습했다면, 15장에서는 파일과 디렉터리를 관리하는 프로그램, '파일 시스템'에 대해 중점적으로 학습했는데요, 숙제에서 14장 위주로 학습 기록을 남겼으니 아래에서는 15장에 대한 이야기를 추가로 정리해 볼게요~!

15-1 파일과 디렉터리

파일 시스템에 학습하기 앞서 파일과 디렉터리에 관한 개념을 잡았어요. 파일은 일련의 데이터 묶음이라면, 디렉터리는 파일의 묶음을 관리하는 단위라고 가볍게 이해할 수 있었습니다.

이러한 파일과 디렉터리에 접근하거나 연산하기 위해서는 OS에 시스템 호출을 요청해야 하며, 파일 시스템을 통해 원하는 특정 파일에 접근할 수 있게 됩니다.

(드디어!!) 15-2 파일 시스템

파일 시스템이 설정되기 전 파티셔닝(저장 장치 영역 구분)과 포매팅(나눈 파티션에 배정할 파일 시스템 결정)을 거쳐 최종적으로 파일 시스템을 사용할 수 있는 환경을 마련합니다.

파일 시스템의 종류로는 크게 FAT, 유닉스 파일 시스템을 살펴보았는데요, 연속할당과 불연속할당(연결할당, 색인할당)을 기반으로 어떻게 시스템이 운영되는지, 파일 시스템의 구체적인 작동방식보다도 '아이디어'를 중점으로 학습을 진행했어요.

할당 방식들과 파일 시스템에 대해 간단한 설명을 정리하며 이번 학습을 마무리해 보겠습니다:)

연속할당: 메모리에 블록(단위로 나누어진 프로세스)을 연속적으로 할당

불연속할당: 메모리에 블록을 불연속적으로 할당.

- 연결할당: 블록에 다음 블록의 주소를 작성. => 특정 번호의 블록을 찾는 효율이 낮음(무조건 순차탐색)

- 색인할당: '색인블록'에 파일에 해당하는 모든 블록 주소 정보 저장

FAT 파일 시스템: '연결할당' 기반의 파일 시스템. FAT(파일 할당 테이블)을 이용하여 프로세스 블록 접근

유닉스 파일 시스템: ' 색인할당' 기반의 파일 시스템. ' i-node'가 색인 블록의 역할을 수행함. 다만, i-node의 유한한 크기(15개 엔트리)로 저장하는 프로세스의 크기에 따라 n중 간접 블록 형태를 사용하기도 함.

드디어 혼공컴운 마무리~!

드디어 혼공컴운 6주차와 함께 이번 12기 혼공학습단 학습을 마무리하였습니다!! (짝짝)

보람차고도 섭섭+헛헛한 이 마음은 따로 회고록에서 더 작성해 보도록 하겠어요.

모두들 정말 수고하셨고,

남경민 아주아주 잘했다!! 😎

# data[].attributes.attachment_link.title
[혼공컴운] 6주차_페이지 교체 알고리즘과 파일 시스템

# data[].attributes.attachment_link.description
안녕하세요~! 오늘은 특별히 다른 혼공컴운 학습주차보다 더 밝고 홀가분한 마음이네요! 캬캬네!!! 드디어 이번 여름 혼공학습단 12기 마지막 학습 주차를 맞이했어요, 와~!!항상 안 올 것 같은 마지막을 맞이하는 마음은 꽤나 설레고, 시원섭섭하네요. 이번 학습주간에는 운영체제의 페이지 교체 알고리즘과 파일 시스템에 대해 중점적으로 학습했는데요, 마지막 주차인 만큼 꽤나 양이 방대하고 중요하게 느껴졌지만 끝끝내 해낸 스스로에게 박수를 보내며 이번 6주차 학습 기록도 힘차게 남겨보아요~ 아좌좌~!!

# data[].attributes.body
회고록입니다~ 그동안 다들 정말 고생 많으셨어요!

# data[].attributes.attachment_link.description
벌써 6주, 아니 방학까지 7주가 지났다는 걸 믿을 수 없네요. 방학을 조금이라도 알차게 보낼 수 있지 않을까 싶어, 가벼운 마음에 신청했던 기억이 납니다. 되면 좋고 안 되면 어떡하지(...)라는 생각이었는데, 좋은 기회 주셔서 감사합니다. 덕분에 그나마 생산적으로 살 수 있었습니다ㅎㅎC언어 강의를 들은 적은 있으나, 포인터의 벽에 막혀 그 뒤로 다시 쳐다보지 않은 언어입니다. 프로그래밍은 내 적성에 안 맞나 의심하게 한 언어기도 하죠. 그런데 혼공학습단 활동을 하며 부담을 버리고, 천천히 복습하며 C언어라는 벽을 넘고 있는 기분입니다. 혼공단 활동은 워밍업이고, 고급편이 진짜인 것 같긴 한데(...), 학습단 활동하며 만든 공부 습관을 바탕으로 계속 도전할 수 있길 바랍니다. 족장님도, 12기 분들도…

# data[].attributes.body
마지막 과제 제출합니다.

# data[].attributes.attachment_link.title
[혼공파] 6주차_혼공 네트워크 : 네이버 블로그

# data[].attributes.body
6주차 과제 제출합니다!

혼공족장님, 완주하신 분들 다들 고생 많으셨습니다~!

# data[].attributes.attachment_link.readable_text
스와핑(Swapping)

스와핑은 메모리 관리 기법 중 하나로, 사용되지 않는 프로세스를 메모리에서 보조 기억 장치로 이동시키고, 실행할 프로세스를 메모리로 가져오는 방식이다. 이를 통해 메모리의 효율적인 사용을 가능하게 하며, 프로세스 간의 자원 경쟁을 완화할 수 있다.

메모리 할당 방식

최초 적합 방식(First Fit Method): 최초 적합 방식은 메모리에서 첫 번째로 발견한 적재 가능한 빈 공간에 프로세스를 배치하는 방법이다. 이 방식은 탐색 시간을 줄일 수 있으나, 공간 활용이 비효율적일 수 있다.

최적 적합 방식(Best Fit Method): 최적 적합 방식은 프로세스가 적재될 수 있는 가장 작은 빈 공간에 프로세스를 배치하는 방법이다. 이 방식은 메모리 공간을 효율적으로 사용할 수 있지만, 작은 빈 공간들이 많이 남아 외부 단편화를 초래할 수 있다.

최악 적합 방식(Worst Fit Method): 최악 적합 방식은 프로세스가 적재될 수 있는 가장 큰 빈 공간에 프로세스를 배치하는 방법이다. 이 방식은 큰 빈 공간이 빠르게 소모되기 때문에, 큰 프로세스를 위한 공간이 부족해질 위험이 있다.

외부 단편화(External Fragmentation)

외부 단편화는 메모리 내에 존재하는 작고 불규칙한 빈 공간들로 인해 새로운 프로세스를 할당하기 어렵게 되어 메모리가 낭비되는 현상을 의미한다. 외부 단편화 문제를 해결하기 위해 압축(Compaction)이나 메모리 재배치 같은 기법이 사용될 수 있다.

페이징(Paging)

페이징은 물리적 메모리를 일정 크기의 프레임으로 나누고, 프로세스의 논리적 주소 공간을 동일한 크기의 페이지로 나눈 뒤 각 페이지를 물리적 메모리의 프레임에 할당하는 가상 메모리 관리 기법이다. 이를 통해 메모리의 효율적인 사용과 외부 단편화를 줄일 수 있다.

페이지 테이블(Page Table)

페이지 테이블은 각 프로세스의 페이지가 물리적 메모리의 어느 프레임에 적재되었는지를 기록하는 구조체이다. 페이지 테이블에는 페이지 번호와 프레임 번호 외에도 유효 비트(Valid Bit), 보호 비트(Protection Bit), 접근 비트(Access Bit), 수정 비트(Dirty Bit) 등이 포함된다. 페이지 테이블 기반 레지스터(PTBR)는 프로세스의 페이지 테이블이 메모리에 위치한 주소를 가리킨다.

TLB(Translation Lookaside Buffer)

TLB는 페이지 테이블의 캐시 역할을 하며, 자주 사용되는 페이지 테이블 항목을 저장하여 메모리 접근 속도를 향상시킨다. TLB를 사용하면 페이지 테이블 접근이 줄어들어 전체 시스템 성능을 개선할 수 있다.

요구 페이징(Demand Paging)

요구 페이징은 페이지가 필요할 때만 메모리에 적재하는 기법으로, 필요한 페이지만 로드하여 메모리 사용을 최적화한다. 이 방식은 페이지 부재(Page Fault)를 최소화하려는 목적에서 사용되며, 메모리의 효율성을 높일 수 있다.

페이지 교체 알고리즘(Page Replacement Algorithms)

페이지 교체 알고리즘은 메모리에서 불필요한 페이지를 교체하는 방법을 정의한다. 대표적인 알고리즘으로는 FIFO(First-In, First-Out), 최적 교체(Optimal), LRU(Least Recently Used) 등이 있다. 이 알고리즘들은 시스템의 성능과 메모리 활용도를 좌우하는 중요한 요소이다.

스래싱(Thrashing)

스래싱은 지나치게 빈번한 페이지 교체로 인해 CPU 이용률이 급격히 떨어지는 현상을 의미한다. 스래싱이 발생하면 시스템 성능이 심각하게 저하될 수 있으며, 이를 방지하기 위해 워킹 셋(Working Set) 모델이나 페이지 폴트율(Page Fault Rate) 기반 프레임 할당 방식이 사용된다.

프레임 할당 방식(Frame Allocation Methods)

프레임 할당 방식에는 균등 할당(Equal Allocation)과 비례 할당(Proportional Allocation)이 있으며, 워킹 셋 모델이나 페이지 폴트율을 기반으로 하는 방식도 있다. 이러한 방식들은 프로세스 간의 메모리 자원을 어떻게 분배할지를 결정하여, 시스템의 효율성을 높인다.

파일(File)

파일은 의미 있고 관련 있는 정보를 모아 하나의 논리적 단위로 구성된 데이터 집합이다. 운영체제는 파일의 확장자를 통해 파일의 유형을 식별할 수 있으며, 파일과 관련된 다양한 부가 정보들이 파일 속성으로 저장된다.

디렉터리(Directory)

디렉터리는 여러 개의 파일 또는 디렉터리를 그룹으로 묶어 관리하는 구조로, 파일 시스템에서 중요한 역할을 한다. 경로(Path)는 디렉터리를 이용해 파일이나 디렉터리의 위치를 특정 짓는 정보를 제공하며, 루트 디렉터리부터 시작하는 절대 경로와 현재 디렉터리부터 시작하는 상대 경로로 나뉜다.

파티셔닝(Partitioning)

파티셔닝은 하드 디스크나 SSD와 같은 대용량 저장 장치를 여러 개의 논리적 단위로 나누는 작업을 의미한다. 이를 통해 하나의 물리적 디스크를 마치 여러 개의 디스크처럼 사용할 수 있으며, 데이터를 더욱 효율적으로 관리할 수 있다.

포매팅(Formatting)

포매팅은 저장 장치에 파일 시스템을 설정하여 데이터를 저장하고 관리할 수 있도록 준비하는 작업이다. 포매팅 과정에서는 파일 시스템의 유형과 구조를 결정하고, 새로운 데이터를 기록할 수 있는 환경을 조성한다.

파일 할당 방식(File Allocation Methods)

연속 할당(Contiguous Allocation): 연속 할당은 보조 기억 장치 내 연속적인 블록에 파일을 할당하는 방식으로, 파일의 저장 위치가 물리적으로 연속된 블록에 존재한다. 이 방식은 파일 접근 속도가 빠르지만, 외부 단편화 문제가 발생할 수 있다.

연결 할당(Linked Allocation): 연결 할당은 파일의 각 블록 일부에 다음 블록의 주소를 저장하여 블록들을 연결 리스트 형태로 관리하는 방식이다. 이 방식은 외부 단편화를 피할 수 있지만, 임의 접근 시 성능이 저하될 수 있다.

색인 할당(Indexed Allocation): 색인 할당은 파일의 모든 블록 주소를 하나의 색인 블록에 모아 관리하는 방식으로, 파일의 임의 접근 성능을 향상시킬 수 있다. 그러나 색인 블록이 커지면, 색인 블록 관리 자체가 복잡해질 수 있다.

파일 시스템(File Systems)

FAT 파일 시스템(FAT File System): FAT 파일 시스템은 파일 할당 테이블(FAT)을 이용하여 파일의 블록들을 연결하는 연결 할당 기반의 파일 시스템이다. FAT는 간단한 구조로 인해 널리 사용되었으나, 대용량 디스크에서 성능이 저하될 수 있다.

유닉스 파일 시스템(Unix File System): 유닉스 파일 시스템은 i-node라는 구조체를 이용하여 파일의 메타데이터와 블록 정보를 관리하는 색인 할당 기반의 파일 시스템이다. i-node를 통해 파일에 대한 효율적인 접근과 관리를 할 수 있으며, 유닉스 계열 운영체제에서 널리 사용된다.

기본 숙제

1. p. 400의 확인 문제 1번

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

최초 적합, 최적 적합, 최악 적합

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

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

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

스터디를 마치며,

어느새 '혼자 공부하는 컴퓨터구조 + 운영체제' 책을 공부하기 위한 스터디인 혼공학습단 12기 스터디가 모두 마무리 되었습니다!

혼자 읽었다면 훨씬 더 더디게 읽게 되었을 것 같고, 정리하지 않아 기억이 휘발되었을 것 같은데,

혼공학습단 덕분에 이렇게 완주할 수 있었습니다.

좋은 경험이였어서, 다음에 다른 책으로도 참여해보고 싶네요!

# data[].attributes.attachment_link.title
[혼공컴운] '혼자 공부하는 컴퓨터구조 + 운영체제' 스터디 6주차

# data[].attributes.attachment_link.description
스와핑(Swapping)스와핑은 메모리 관리 기법 중 하나로, 사용되지 않는 프로세스를 메모리에서 보조 기억 장치로 이동시키고, 실행할 프로세스를 메모리로 가져오는 방식이다. 이를 통해 메모리의 효율적인 사용을 가능하게 하며, 프로세스 간의 자원 경쟁을 완화할 수 있다.메모리 할당 방식최초 적합 방식(First Fit Method): 최초 적합 방식은 메모리에서 첫 번째로 발견한 적재 가능한 빈 공간에 프로세스를 배치하는 방법이다.

# data[].attributes.body
6주차 과제 제출합니다.

# data[].attributes.body
6주차 제출합니다:-)

# data[].attributes.attachment_link.description
🔹 대칭 키 암호화 방식은 암호화와 복호화 시 같은 암호 키를 쓰는 암호화 방식이다. 🔹 공개 키 암호화 방식은 암호화와 복호화 시 서로 다른 키를 쓰는 암호화 방식이다. 한 키로 암호화했다면 다른 키로 복호화 할 수 있다. 🔹 공개 키 인증서는 공개 키와 공개 키의 유효성을 입증하기 위한 전자 문서이다. CA라는 인증서 발급 기관을 통해 인증서를 검증할 수 있다. 🔹 개인 키로 암호화된 메시지를 공개 키로 복호화함으로써 신원을 증명하는 저랓를 디지털 서명이라 부른다. 🔹 SSL과 TLS는 인증과 암호화를 가능하게 하는 프로토콜이다. 이 중에서 TLS는 SSL을 계승한 프로토콜이며, 오늘날 SSL/TLS를 사용하는 가장 대표적인 프로토콜은 HTTPS가 있다. 🔹 TLS 핸드셰이크를 통…

# data[].attributes.body
6차시 제출합니다!

# data[].attributes.attachment_link.title
혼공머신 6차시 _ 딥러닝 시작

# data[].attributes.attachment_link.description
Ch.07-1 인공 신경망인공 신경망 - 생물학적 뉴런에서 영감을 받아 만든 머신러닝 알고리즘으로, 기존의 머신러닝 알고리즘으로 다루기 어려웠던 이미지, 음성, 텍스트 분야에서 뛰어난 성능을 발휘함 ( 인공 신경망 알고리즘 = 딥러닝 )텐서플로 - 구글이 만든 딥러닝 라이브러리로 매우 인기 높음 - CPU와 GPU를 사용해 인공 신경망 모델을 효율적으로 훈련하며 모델 구축과 서비스에 필요한 다양한 도구를 제공 - 텐서플로 2.0부터는 신경망 모델을 빠르게 구성할 수 있는 케라스를 핵심 API로 채택함 ( 케라스를 사용하면 간단한 모델에서 아주 복잡한 모델까지 손쉽게 만들 수 있다 )밀집층 - 가장 간단한 인공 신경망의 층이며( 인공 신경망에는 여러 종류의 층이 있다 ), 밀집층에서는 뉴런들이 모두 연결되…

# data[].attributes.body
6주차 제출입니다! 모두 고생하셨습니다~

# data[].attributes.attachment_link.title
[혼공S] 6주차를 마무리 하며

# data[].attributes.attachment_link.description
벌써 마지막 주차라니...! 12기 활동은 다른 일정이랑 너무 겹치다 보니 완주에 의의를 두게 되었다는 게 너무 아쉽다. 하지만 덕분에 포기하지 않고 책 한 권을 다 볼 수 있었고, 방학 동안의 불안을 정리할 수 있었다. 담주는 목요일에 첫 세미나가 있고, 토요일에 SQLD 시험이 있다. 12기분들 중에도 SQLD 시험에 응시하는 분이 많던데 모두 좋은 결과가 있으면 좋겠다! 함께한 족장님과 12기분들 너무 감사하고 고생 많으셨습니다! 기회가 된다면 13기로 다시 만나요~ (각 단원별 학습 내용 정리는 ‘혼공학습단 12기’ 카테고리 안에 있습니다!) 기본 숙제p. 363 market_db의 고객 테이블(member)에 입력된 회원의 정보가 변경될 때 변경한 사용자, 시간, 변경 전의 데이터 등을 기록하…

# data[].attributes.body
다들 수고하셨습니다!!

앞으로도 코딩 파이팅하시길 (•ᴗ•)*✲ﾟ*｡⋆

# data[].attributes.attachment_link.title
[혼공C] 컴퓨터학과의 혼공학습단 12기 회고록

# data[].attributes.attachment_link.description
한빛미디어 - 혼자 공부하는 C 언어로 진행한 스터디입니다. 때는 학기 중이었던 것 같아요?저는 sns를 다른 개발자분들 뭐 하고 계신지, 뭐 만드셨는지 궁금할 때 자주 들어가는데요.때마침 공부가 하기 싫어서 들어갔던 날 팔로우한 어떤 분이 혼공학습단 게시물을 업로드하신 걸 보고야만 것이죠!바로 신청했습니다. 그리고 받은 메일 커리큘럼 많고 많은 분야 중에 c를 고른 이유는요...!제가 곧 알고리즘 과목에서도 c를 써야 하고요..학회나 팀에서도 해킹을 해야 되기 때문에 c가 절실한 상황이었습니다 ...그동안 파이썬과 웹/앱 개발을 더 많이 해서 살짝 가물가물했기 때문이죠..그렇게 6주간 알고리즘 에이쁠을 마음에 새기고 공부하게 되었습니다.사실 c를 방학 동안 다시 한번 정도는 끝내려고 계획했었…

# data[].attributes.body
6주차 제출합니다

# data[].attributes.attachment_link.title
집을 원하는 자 : 네이버 블로그

# data[].attributes.body
무더운 여름 족장님, 그리고 혼공족 분들 전부 고생 많으셨습니다.

# data[].attributes.attachment_link.title
기록과 기억, 그리고 : 네이버 블로그

# data[].attributes.body
다들 넘 고생많으셨습니다

# data[].attributes.attachment_link.description
기본숙제(필수): p.439 09-2 확인 문제 2번 문제 풀고 과정 설명하기혼공 학습단 12기 회고 정말 용두사미의 끝을 달린 스터디였다. 처음엔 의욕이 넘쳐서 코드도 직접 쳐봤었는데 시간이 갈수록 간신히 책만 보고 과제를 내고, 이번주는 다른 스터디 시작으로 혼공을

# data[].attributes.body
6주차는 아래와 같이 인공 신경망과 딥러닝에 대해서 공부했습니다.

​

인공 신경망 : 생물학적 뉴런의 모양을 본 뜬 수학 모델인 뉴런을 이용하여, 기존 머신러닝 알고리즘으로 다루기 어려운 이미지, 음성, 텍스트 분야에서 뛰어난 성과 발휘함.

​

딥러닝 : 2개 이상의 층을 포함한 신경망으로 다층 인공 신경망, 심층 신경망과 같은 의미임. 기존 머신러닝 대비 모델의 구조를 구성하는 것부터 시작해서 모델의 다양한 세부 조건을 조절해서 더 높은 성능을 낼 수 있음.

# data[].attributes.body
6주차 & 회고록 제출합니다

# data[].attributes.attachment_link.title
[혼공학습단 12기] 혼자 공부하는 네트워크 - 6주차 & 회고

# data[].attributes.attachment_link.description
Wireshark · Display Filter Reference: IndexWireshark: The world’s most popular network protocol analyzerwww.wireshark.org - 패킷 1 송신지 포트 : 49859수신지 포트 : 80Sequence Number : 3588415412SYN : 1ACK : 0 - 패킷 2 송신지 포트 : 49859수신지 포트 : 80Sequence Number : 35884154123확인 응답 번호: 697411256SYN : 1ACK : 1 - 패킷 3 송신지 포트 : 49859수신지 포트 : 80Sequence Number : 3588415413확인 응답 번호: 697411257SYN : 0ACK : 1…

# data[].attributes.body
https://m.blog.naver.com/sewculture/223552212680