# data[].attributes.body
늦었지만 그래도 하는 마음!! 족장님 댓글 보고 열심히 혼자서 완주할 생각입니다! 6주차까지 완료하고 회고록도 무족권 작성할 겁니다 ^_^_^_^_^

# data[].attributes.body
타이밍을 놓쳐버려서 제출이 많이 늦었네요 ㅠㅜㅜ 6주차랑 같이 제출하였습니다!!

# data[].attributes.body
3주차 늦은 제출.. 꾸역꾸역 완주하고싶슴다!

# data[].attributes.body
썼던 글 두 번 초기화에 내용이 어려워서 글 작성이 늦어졌습니다...

# data[].attributes.attachment_link.title
[혼공학습단 12기] 혼자 공부하는 컴퓨터 구조 + 운영체제 4주차 (운영체제, 커널, 시스템 콜, 프로세스, 스레드, 메모리 세그먼트, CPU 스케줄링)

# data[].attributes.attachment_link.description
지난 글 까지 컴퓨터 구조에 관한 간단한 내용은 모두 알아보았습니다. 이번 글 부터 운영체제에 대하여 간단하게 알아보도록 하겠습니다. 앞으로 운영체제에 관하여 알아볼 내용은 프로세스, 스레드, CPU 스케줄링, 동기화, 교착 상태, 메모리 할당, 페이징, 파일 시스템에 대하여 알아보겠습니다. 원래 였다면 3주 전에 글 작성을 완료해야 했지만...노트북도 더위를 먹었는지 썼던 글 2회 초기화......같은 글을 세 번째 쓰고 있습니다. 게다가 내용도 어려워서 몇 번이고 다시 읽어보고, 검색도 해보고, 이런저런 일이 많이 있던지라 글 작성이 많이 늦어진 점에 대해서 사과드립니다. 도서 정보 책 제목: 혼자 공부하는 컴퓨터 구조 + 운영체제저자: 강민철출판사: 한빛미디어책 정보 및 구매 사이트:https:/…

# data[].attributes.body
4주차과제를 페이스북에 올렸었는데 재 업로드 합니다.

# data[].attributes.attachment_link.provider_name
네이버 블로그 | 기록과 기억, 그리고

# data[].attributes.attachment_link.title
[혼공알코 4주차] 네트워크 관련 용어 정리, <혼자 공부하는 얄팍한 코딩 지식>

# data[].attributes.attachment_link.description
안녕하세요 에드우드입니다. 한빛미디어의 혼공학습단을 통해 <혼자 공부하는 얄팍한 코딩지식> 줄여…

# data[].attributes.body
일정 까먹음 이슈로 이제야 제출합니다..

# data[].attributes.attachment_link.description
아 일정을 잘못 봐서 4주차 기간이 방학인 줄 알았네요... 🙄늦었지만 이제라도 올립니다 족장님이 주신 아이스티 🫶저날 진짜 더웠는데 덕분에 시원하게 집 갔어요 너무너무 감사드립니다 🙇‍♀️ 함수의 작성과 사용 - 함수 정의 : 함수를 실제 코드로 만듦 >> 함수 기능 구현// 함수 정의 예int sum(int x, int y) {	return x + y;} - 함수 호출 : 함수 사용을 위한 호출// 함수 호출 예sum(10, 20); - 함수 선언 : 어떤 함수를 사용하는지 컴파일러에 정보를 줌// 함수 선언 예int sum(int x, int y); 함수 정의3단계를 거쳐 함수를 만듦1. 함수의 기능에 맞는 이름은? (함수명)2. 함수가 기능을 수행하는 데 필요한 데이터는? (매개…

# data[].attributes.body
4주차 과제입니닷!! 한 주 밀렸는데 얼른 쫓아가겠습니다ㅠㅠ

# data[].attributes.attachment_link.description
혼공스터디 12기로 활동하며 공부한 내용을 요약, 정리 합니다. 1. IP의 한계를 보완한다전송 계층 아래 네트워크 계층의 IP는 신뢰할 수 없는 통신과 비연결형 통신이라는 한계점이 있다. 즉, IP 프로토콜은 패킷이 수신지까지 제대로 전송되었다는 것을 보장하지 않는다. 전송 계층은 바로 이런 IP의 한계를 극복할 수 있게 해 준다. 전송 계층의 대표적인 프로토콜인 TCP는 두 호스트 간에 정보를 주고받기 전에 먼저 연결을 수립하는 과정을 거친다. 그리고 패킷의 도착 순서를 보장하기 위해 재전송을 통한 오류 제어, 흐름 제어, 혼잡 제어 등 여러 기능을 제공한다. (전송 계층에서도 성능을 위해 비연결형 통신을 지원하는 UDP 프로토콜이 존재한다.) 2. 포트를 통해 응용계층에 닿을 수 있는 다리가 된다패…

# data[].attributes.body
https://nowj8n.tistory.com/36

# data[].attributes.attachment_link.readable_text
RAM
- 휘발성 저장 장치(volatile memory ⇔ 비휘발성 저장 장치(non-volatile memory, ex) HDD, SSD, CD-ROM, USB 메모리와 같은 보조기억장치))
- CPU는 보조기억장치에 직접 접근하지 못해, 일반적으로 보조기억장치와 같은 비휘발성 저장 장치에는 '보관할 대상'을, 휘발성 저장 장치인 RAM에는 '실행할 대상'을 저장
- CPU가 실행하고자 하는 프로그램이 보조기억장치에 있다면 이를 RAM으로 복사하여 저장한 뒤 실행

DRAM(Dynamic RAM)
- 저장된 데이터가 동적으로 변하는 RAM
- 시간이 지나면 저장된 데이터가 점차 사라져 일정 주기로 데이터를 재활성화해야 함
- 소비 전력이 비교적 낮고, 저렴하고, 집적도가 높기 때문에 대용량으로 설계하기가 용이

SRAM(Static RAM)
- 저장된 데이터가 변하지 않는 RAM
- 시간이 지나도 저장된 데이터가 사라지지 않아 DRAM보다 일반적인 속도도 더 빠름
- 집적도가 낮고, 소비 전력도 크며, 가격도 더 비쌈
- '대용량으로 만들어질 필요는 없지만 속도가 빨라야 하는 저장 장치'인 캐시 메모리 등에 사용됨

SDRAM(Synchronous Dynamic RAM)
- 클럭 신호와 동기화된, 발전된 형태의 DRAM

DDR SDRAM(Double Data Rate SDRAM)
- 대역폭을 넓혀 속도를 빠르게 만든 SDRAM
- 최근 가장 흔히 사용됨
- 두 배의 대역폭으로 한 클럭당 두 번씩 CPU와 데이터를 주고받을 수 있음(SDRAM은 한 클럭에 한 번씩 CPU와 데이터 송수신 가능)

물리 주소(physical address)
- 메모리 하드웨어가 사용하는 주소
- 정보가 실제로 저장된 하드웨어상의 주소

논리 주소(logical address)
- CPU와 실행 중인 프로그램이 사용하는 주소
- 실행 중인 프로그램 각각에게 부여된 0번지부터 시작되는 주소

MMU(Memory Management Unit, 메모리 관리 장치)
- 논리 주소와 물리 주소 간의 변환 수행
- CPU와 주소 버스 사이 위치
- CPU가 발생시킨 논리 주소에 베이스 레지스터 값을 더하여 논리 주소를 물리 주소로 변환

한계 레지스터(limit register)
- 논리 주소 범위를 벗어나는 명령어 실행을 방지하고 실행 중인 프로그램이 다른 프로그램에 영향을 받지 않도록 보호하는 역할
- 논리 주소의 최대 크기를 저장(베이스 레지스터는 실행 중인 프로그램의 가장 작은 물리 주소를 저장)
- 베이스 레지스터 값 ≤ 프로그램의 물리 주소 범위 < 베이스 레지스터 값 + 한계 레지스터 값

저장 장치 계층 구조(memory hierarchy)
- 컴퓨터 시스템에서 데이터 저장 장치가 계층적으로 구성된 구조를 의미
- CPU와의 물리적인 거리가 아닌 데이터 접근 속도와 비용, 용량 등을 고려하여 설계

캐시 메모리(cache memory)
- CPU와 메모리 사이에 위치
- 레지스터보다 용량이 큼
- 메모리보다 빠른 SRAM 기반 저장 장치
- CPU 코어와 가까운 순서대로 계층을 구성하며 L1 캐시, L2 캐시, L3 캐시로 나눔
- 일반적으로 L1, L2 캐시는 코어 내부에, L3 캐시는 코어 외부에 위치해 있음

참조 지역성의 원리(locality of reference, principle of locality)
- ① 시간 지역성(temporal locality): CPU는 최근에 접근했던 메모리 공간에 다시 접근하려는 경향이 있다
② 공간 지역성(spatial locality): CPU는 접근한 메모리 공간 근처를 접근하려는 경향이 있다

하드 디스크(HDD, Hard Disk Drive)
- 자기적인 방식으로 데이터를 저장하는 보조기억장치(자기 디스크, magnetic disk의 일종)
- 플래터(platter): 하드 디스크에서 데이터가 실질적으로 저장되는 곳
트랙(track): 플래터를 여러 동심원으로 나누었을 때 그 중 하나의 원
섹터(sector): 트랙을 여러 조각으로 나눈, 하드 디스크의 가장 작은 전송 단위
일반적으로 512바이트 정도의 크기
실린더(cylinder): 여러 겹의 플래터 상에서 같은 트랙이 위치한 곳을 모아 연결한 논리적 단위
- 스핀들(spindle): 플래터를 회전시키는 구성 요소
- 헤드(head): 플래터를 대상으로 데이터를 읽고 쓰는 구성 요소
- 디스크 암(disk arm): 헤드를 원하는 위치로 이동시키는 구성 요소

하드 디스크가 저장된 데이터에 접근하는 시간

탐색 시간(seek time): 접근하려는 데이터가 저장된 트렉까지 헤드를 이동시키는 시간

회전 시간(rotational latency): 헤드가 있는 곳으로 플래터를 회전시키는 시간

전송 시간(transfer time): 하드 디스크와 컴퓨터 간에 데이터를 전송하는 시간

플래시 메모리(flash memory)
- 데이터를 읽고 쓸 수 있는 반도체 기반의 저장 장치
- 플래시 메모리에서 데이터를 저장하는 가장 작은 단위인 셀(cell)에 저장되는 비트에 따라 플래시 메모리의 종류가 SLC, MLC, TLC로 나뉨
- 셀들이 모여 만들어진 단위를 페이지(page), 페이지가 모여 만들어진 단위를 블록(block), 블록이 모여 플레인(plane), 플레인이 모인 다이(die)가 됨
- 읽기와 쓰기는 페이지 단위로 이루어지며, 삭제는 페이지보다 큰 블록 단위로 이루어짐
- 페이지는 Free, Valid, Invalid 상태를 가질 수 있음
Free: 데이터를 저장하고 있지 않아 새로운 데이터를 저장할 수 있는 상태
Valid: 이미 유효한 데이터를 저장하고 있는 상태
Invalid: 쓰레기값이라 부르는 유효하지 않은 데이터를 저장하고 있는 상태

RAID(Redundant Array of Independent Disks)
- 데이터의 안전성이나 높은 성능을 위해 여러 개의 물리적 보조기억장치를 하나의 논리적 보조기억장치처럼 사용하는 기술

RAID 0
- 여러 개의 보조기억장치에 데이터를 단순히 나누어 저장하는 구성 방식
- 어떤 데이터를 저장할 때 각 하드 디스크는 번갈아 가며 데이터를 저장함
- 데이터가 분산되어 저장(스트라이핑)되면 저장된 데이터를 읽고 쓰는 속도가 빨라짐
- RAID 0으로 구성된 하드 디스크 중 하나에 문제가 생기면 다른 모든 하드 디스크의 정보를 읽는 데 문제 발생

- RAID 0의 단점을 보완하기 위해 완전히 동일한 복사본을 구성하는 방식
- 데이터를 read할 때 원본과 복사본에 쓰기를 실행하다보니 RAID 0보다 쓰기 속도가 느림
- 많은 양의 하드 디스크가 필요하고, 비용이 증가

RAID 4
- 완전한 복사본을 만드는 대신 오류를 검출하고 복구하기 위한 정보(패리티 비트, parity bit)를 저장한 장치를 두는 구성 방식
- 패리티를 저장한 장치를 이용해 다른 장치들의 오류를 검출하고, 오류가 있다면 복구함
- 새로운 데이터가 저장될 때마다 패리티를 저장하는 디스크에도 데이터를 쓰게 되므로 패리티를 저장하는 장치에 병목 현상이 발생

RAID 5
- 패리티 정보를 분산하여 저장하는 방식

RAID 6
- 서로 다른 두 개의 패리티를 두는 방식
- RAID 4나 RAID 5보다 안전한 구성
- 저장할 패리티가 두 개이므로, RAID 5보다 느린 쓰기 속도

기본 숙제
p. 185의 확인 문제 3번, p. 205의 확인 문제 1번 풀고 인증하기

3. 다음 설명을 읽고 SRAM에 대한 설명인지 DRAM에 대한 설명인지 쓰세요.
| 보기 | SRAM, DRAM
● 주로 캐시 메모리로 활용됩니다. ( ① )
● 주로 주기억장치로 활용됩니다. ( ② )
● 대용량화하기 유리합니다. ( ③ )
● 집적도가 상대적으로 낮습니다. ( ④ )

정답: ①④ : SRAM, ②③ : DRAM

1. 다음 보기에 있는 저장 장치들로 저장 장치 계층 구조 도식도를 채우세요.
|보기| 메모리, 보조기억장치, 캐시 메모리, 레지스터

정답: ①: 레지스터 ②: 캐시 메모리 ③: 주기억장치 ④: 보조기억장치
추가 숙제
Ch.07(07-2) RAID의 정의와 종류를 간단히 정리해 보기

RAID: 다수의 하드디스크를 하나의 하드디스크처럼 사용

RAID-0: 데이터를 여러 개의 하드디스크에 번갈아가며 저장(스트라이핑)

RAID-1: 복구를 위해 RAID-0으로 저장된 데이터를 이중으로 저장(미러링)

RAID-2: 데이터가 저장될 디스크와 복구용 디스크를 구분해 저장(해밍코드 사용)

RAID-3: 해밍코드가 아닌 패리티비트를 사용
RAID-4: 데이터를 비트가 아닌 블록 단위 저장

RAID-5: 패리티 정보가 라운드 로빈 방식으로 각 디스크에 순차 저장

RAID-6: 각 패리티 정보를 두 개의 디스크에 분산 저장

# data[].attributes.body
해외여행으로인해 4주차 이제서야 올려요ㅠㅠ

자바 처음 배울 때 도대체 상속이 뭔지 너무 헷갈렸는데 이제야 이해가 되네요 혼공자 쵝오:)

# 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
혼공 SQL 4주차 인증입니다!! 해외봉사 오게돼서

# data[].attributes.attachment_link.description
늦게 제출해서 정말정말 죄송합니다 8ㅁ8...

# data[].attributes.body
기록을 위해 4주차 인증글 남겨놓습니다!

# data[].attributes.attachment_link.title
[혼공단] 혼자 공부하는 네트워크 / 혼공단 12기 - 4주차

# data[].attributes.attachment_link.description
[혼공단] 혼자 공부하는 네트워크 / 혼공단 12기 - 4주차[기본 미션] Ch.04(04-1) 확인 문제 1번(p.206), (04-2) 확인 문제 2번(p.225) 풀고 설명하기Ch.04-1 확인 문제 : IP와 연관된 통신 특성으로 알맞은단어를 에서 골라 보세요. ③, ④신뢰성연결형비신뢰성비연결형IP는 신뢰할 수 없는(비신뢰성)프로토콜(unreliable protocol)이자 비연결형 프로토콜(connectionless protocol)이다. IP를 통한 패킷의 전달은 신뢰성이 없는 통신이자 연결을 수립하는 과정이 없는 통신이다.신뢰할 수 없는 통신은 IP 프로토콜이 패킷이 수신지까지 제대로 전송되었다는 보장을 하지 않는 특징.비연결형 통신은 이름 그대로 송수신 호스트 간에 사전 연결 수립 작업을…

# data[].attributes.headline
혹시 5주차 제출 링크 찾으시나요?

# data[].attributes.subject
혹시 5주차 제출 링크 찾으시나요?

# data[].attributes.body
https://padlet.com/hbhongong/12-5-1sevbod7j0s1nmxe

여기입니다.

# data[].attributes.headline
1~3주차 혹시 제출하고 싶은 분들은

# data[].attributes.subject
1~3주차 혹시 제출하고 싶은 분들은

# data[].attributes.body
4주차 제출하실 때 1,2,3 주차 글도 확인해 달라고 멘트 남겨주세요.

# data[].attributes.headline
4주차 우수혼공족(링크 들어가서 보세요)

# data[].attributes.subject
4주차 우수혼공족(링크 들어가서 보세요)

# data[].attributes.body
안녕하세요, 천사 같은 여러분
혼공족장입니다.

방학은 잘 보내고 계신가요? 평화로운 여름 방학에 페이스북 업로드 문제로 불편을 드려 죄송합니다. 메일로 댓글로 패들렛에 제출해 달라고 말씀드렸는데, 오히려 좋다는 반응에 감동받아 눈물을 훔치는 중입니다. 무더운 여름에 공부까지 하시는데 왜 짜증을 안 내세요..? 다들 천사이신 걸까요?

아무튼 죄송한 마음과 감사한 마음을 담아 💚죄송! 감사! 럭키 이벤트💚를 8월 5일부터 8월 11일까지 진행합니다. 취준생부터 직장인 그리고 학부모를 위한 도서까지 다양하게 준비하였으니 많은 참여 부탁드립니다.

+) 4주 차는 174명의 혼공족이 참여하셨고 신청자의 약 41%입니다. 한 움큼 사라지셨는데 아마 방학을 유연하게 사용하시느라 그런 거겠죠? 돌아오실 거라 생각합니다. 아래 이미지는  '공부하면 할수록 더 모르겠고 헷갈리고 바보 가튼 나'라는 생각이 들 때 그러지 마시라고 가져왔습니다. 잠깐 어렵고 힘들다고 공부/일/운동 포기하지 마시고, 주식도 팔지 마십시오.

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

# data[].attributes.attachment_link.provider_name
네이버 블로그 | 자취의 방정식

# data[].attributes.attachment_link.readable_text
gini 는 지니 불순도 를 의미하는데, DecisionTreeClassifier 클래스의 criterion 매개변수의 기본값은 'gini'입니다. criterion 매개변수는 노드에서 데이터를 분할할 기준이 되는 불순도를 지정하며, 여기에서 불순도는 클래스별 비율을 통해 계산합니다.

DT는 부모 노드와 자식 노드의 불순도 차이가 가능한 크도록 트리를 성장시키는데 이때 부모와 자식 노드 사이의 불순도 차이를 정보 이득 information gain 이라고 부릅니다.

즉, 정보 이득이 최대가 되도록 데이터를 나누는데 이때 지니 불순도가 기준 이 됩니다.

특성값의 스케일은 결정 트리 알고리즘에 영향을 미치지 않으므로, 표준화 전처리를 할 필요가 없습니다.

이에 따라 특성값을 표준점수로 바꾸지 않아, 이해하기가 훨씬 쉽습니다! 위 그림을 통해 당도가 1.625 이상 4.325 이하 와인 중 알코올 도수가 11.025이하이면 레드 와인, 그 외에는 화이트 와인으로 예측함을 알 수 있습니다. ​

# data[].attributes.attachment_link.description
안녕하세요, 혼공학습단 12기 류선아입니다!! 오늘은 5단원 트리 알고리즘과 함께 돌아왔습니다. 이제 3주...

# data[].attributes.body
무더위 잘 이겨내세요.

# data[].attributes.attachment_link.readable_text
2.

→ 반복문을 함수적용해서 작성

sum 함수 적용

- 수학적 함수

→ 반복문을 함수적용해서 작성

sum 함수 적용

function 코드의 집합을 나타내는 자료형으로 '기능'을 의미한다.

- 익명함수 : 이름이 붙어있지 않은 함수. function () {} 형태로 만든다.

이름이 없기 때문에 변수에 넣어서 사용한다.

- 선언적 함수 : 이름이 붙어있는 함수. function 함수이름 () {} 형태로 만든다.

function 키워드를 이용하여 함수를 선언한다.

* 익명함수와 선언적 함수의 가장 큰 차이는 호출 순서의 차이다.

익명 함수 : 코드를 위에서 아래로 읽은 순서대로 실행하기 때문에 함수를 호출하기 전에 먼저 선언해야 실행할 수 있다.

선언적 함수 : 웹 브라우저에서 코드를 위에서 아래로 읽기 전에 선언적 함수부터 읽기에 함수를 선언하기 전에 호출해도 오류없이 실행된다.

return 함수를 실행햇던 위치로 돌아가게 하는 것

리턴값을 가지는 함수는 반드시 리턴할때 반환하는값이 있어야 한다.

- 조기 리턴 : 함수 내 필요한 위치에서 return 키워드를 사용하는 것

-return value (리턴값) : 함수의 실행 결과값 // 함수의 최종 결과

* input = 매개변수 > 함수 > output = 리턴값

- 매개변수 : 함수를 호출할 때 필요한 데이터를 외부에서 받기 위해 사용하는 것

괄호 안에 적는다.

자료 > 함수 → f( 매개변수)

- 나머지 매개변수 : 호출할 때 매개변수의 개수가 고정적이지 않은 함수를 가변 매개변수 함수라고 부르는데

자바스크립트에서는 나머지 매개변수로 구현한다.

나머지 매개변수는 매개변수 앞에 ...을 붙여서 선언한다. (나머지 매개변수는 1개만 / 매개변수 마지막 위치에서만)

const 함수 = function (...매개변수) {} → 배열

- 전개 연산자 : 배열을 함수의 매개변수로써 전개하고 싶을 때 사용. 배열 앞에 ...을 붙여서 사용

함수(...배열)

- 기본 매개변수 : 매개변수에 기본값을 지정할 때 사용. 기본 매개변수는 매개변수의 오른쪽에 사용하여 구현

* 매개변수 오른쪽 구현 → 함수 이름(매개변수, 매개변수=기본값)

- 비동기 프로그래밍 : 요청과 결과가 동시에 일어나지 않는 것을 의미. 코드가 작성된 순서대로 실행되는 것이 아니라 행위를 요청한 뒤, 그 결과를 기다리지 않고 다른 코도를 실행하여 실행 흐름을 방해하지 않고 그대로 흐름을 이어가는 것을 말한다.

p.221

- 콜백 함수

함수를 매개변수로 전달하는 함수

const 테스트 = function (콜백함수) {

콜백함수 ()

}

- 화살표 함수

콜백 함수를 쉽게 입력하는 함수 생성 방법. ()→{} 형태로 함수를 만들고, 리턴값만을 가지는 함수면 (매개변수)=>리턴값으로 간편하게 사용

-메소드 체이닝

어떤 메소드가 리턴하는 값을 기반으로 여러 메소드를 이어서 호출하는 문법 / 코드가 간결해서 하나의 문장처럼 읽히게 하는 장점

-스코프

변수에 접근할 수 있는 범위. 중괄호나 함수를 사용해서 블록을 만들어 준다.

* 전역 스코프 : 어느 곳에서도 해당 변수에 접근 할 수 있다.

* 지역 스코프 : 범위를 벗어난 곳에서는 해당 변수에 접근할 수 없다.

- 새도잉

함수 외부에서 선언한 변수를 함수 내부에서도 같은 이름으로 변수 선언하여 사용할때, 함수 내부의 변수가 함수 외부의 변수를 가리는 현상.

해당 함수 내부에서 선언된 변수만 인식하기 때문에 변수가 서로 충동하지 않는다.

- 엄격모드

코드를 엄격하게 검사하는 기능. 기존으 자바스크립트 문법을 엄격하게 적용하여 평소에 무시하던 오류를 찾아내기 때문에 보다 안전한 코드를 작성할 수 있다. 스크립트 시작 혹은 함수 부분에 'use strict'라는 문자열을 선언하여 사용한다.

p. 202 <윤년을 확인하는 함수 만들기> 예제를 실행하여 2022년이 윤년인지 확인하는 결과 인증하기

[추가숙제]

p. 240 확인 문제 1번 풀고, 풀이 과정 설명하기

# data[].attributes.attachment_link.description
4주차 진도 [Chapter 05] - 프로시저 형태 함수1. 2. → 반복문을 함수적용해서 작성sum 함수 적용 - 수학적 함수→ 반복문을 함수적용해서 작성sum 함수 적용 function 코드의 집합을 나타내는 자료형으로 '기능'을 의미한다. - 익명함수 : 이름이 붙어있지 않은 함수. function () {} 형태로 만든다. 이름이 없기 때문에 변수에 넣어서 사용한다.

# data[].attributes.body
혼공네트 4주차 제출합니다.

페이스북 링크는 안 지워졌지만 연습 차원에서 업로드합니다. 새로운 경험 오히려 좋아

+ 족장님 파이팅

# data[].attributes.attachment_link.title
두번째 창고 : 네이버 블로그

# data[].attributes.body
휴가 잘 보내시고 5주차에 뵈요~~~

# data[].attributes.attachment_link.title
바람 따라 구름 따라 : 네이버 블로그

# data[].attributes.attachment_link.title
종이책을 좋아하는 개발자 : 네이버 블로그

# data[].attributes.headline
[혼공네트] 혼공네트 4주차 미션 올립니다_지용호(5911)

# data[].attributes.subject
[혼공네트] 혼공네트 4주차 미션 올립니다_지용호(5911)

# data[].attributes.body
안녕하세요 족장님? 혼공네트 4주차 숙제 올립니다. 페이스북에서 쫓겨나 모두모두 모여있으니 왠지 눈물이 앞을 가린다는... ㅋㅋ 고생 많으십니다!

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

# data[].attributes.body
4주차 제출합니다~페이스북은 완전 차단당해버렸네요 ㅜ_ㅜ 모두들 즐거운 하루 되세요 ^^

# data[].attributes.attachment_link.provider_name
네이버 블로그 | 평화로운 하루를 위하여

# data[].attributes.attachment_link.title
12기 혼공프로) 4주차

# data[].attributes.attachment_link.description
3주차 공부를 한 게 엊그제같은데 벌써 4주차 월요일이다. 어느 요일에 무슨 일정이 있다만 기억하고 움직…

# data[].attributes.body
페이스북 게시글 삭제로 4주차 다시 올려드려요.

# data[].attributes.body
https://m.blog.naver.com/fofer/223528350977

4주차미션 제출합니다

# data[].attributes.attachment_link.provider_name
네이버 블로그 | 고냥의 왜 사냐면...

# data[].attributes.attachment_link.title
[혼공학습단12기] 혼자공부하는 얄팍한코딩지식 4주차 미션

# data[].attributes.attachment_link.description
#혼공얄코 #혼공학습단 #혼자공부하는얄팍한코딩지식 #한빛미디어 [4주차 미션] - 기본미션 : Ch.02 마무…

# data[].attributes.attachment_link.title
릴센트의 인생 재개발 : 네이버 블로그

# data[].attributes.attachment_link.title
내가 세상으로 향하는 첫 걸음마 : 네이버 블로그

# data[].attributes.headline
안녕하세요 여러분,,,,죄송합니다.

# data[].attributes.subject
안녕하세요 여러분,,,,죄송합니다.

# data[].attributes.body
업로드 방식 바뀌었는데도, 불평 없이 참여해 주셔서 감사합니다. 이것도 나름 추억이 되겠지요..? ^^ 4주차 ㅠㅡㅠ 쿠폰을 댓글로 하나 하나 달았다가 사이트 터질까봐 여기에 남기겠습니다.

그리고 어차피 익명이니까 재미있게 다른 분 게시물에 댓글 달아주세요.

# data[].attributes.attachment_link.title
혼공학습단 12기 숙제검사 4주차

# data[].attributes.body
혼공분석 4주차 제출합니다~

혼공분석인가요 혼공데분인가요 맨날 헷갈려용 족장님!!!! 다달라...!

# data[].attributes.body
​4주차는 트리 알고리즘에 대해서 학습했습니다.

결정 트리​

교차 검증과 그리드 서치

트리의 앙상블

# data[].attributes.body
페이스북 게시글 삭제되어서 여기에 올려요!

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

# data[].attributes.body
다들 화이팅입니다~

# data[].attributes.attachment_link.readable_text
혼공학습단 12기는 7/01일부터 8/18일까지 진행하는 스터디 활동입니다.

★ 이번주 공부할 내용

혼자 공부하는 자바(개정판)

『혼자 공부하는 자바』가 더욱 풍성한 내용을 담아 돌아왔습니다! 개정판은 기존의 자바 8 & 11 버전은 물론, 최신 버전인 자바 21까지 다룹니다. 자바 21 버전의 강화된 언어 기능을 담은 총 260개

www.youtube.com

이번주 공부할 내용은

· Chapter07 상속
파트입니다!!
먼저 클래스의 타입변환에 대해 알기 위해서는 상속과 메소드 오버라이딩에 대해 알아봅시다.
상속(Inheritance)이란? 명사
2 (과거·선대로부터 물려받는) 유산, 유전(되는 것)

객체 지향 프로그래밍에서 또한 부모 클래스의 멤버를 자식 클래스에게 물려줄 수 있습니다.

부모 클래스를 "상위 클래스"라 부르고, 자식 클래스를 "하위 클래스" 또는 "파생 클래스"라고 부릅니다.

class 자식클래스 extends 부모클래스{ // Field(필드) // Constructor(생성자) // Method(메소드) }
※ 자바에서 상속은 다음의 특징이 있습니다 ① 여러 개의 부모 클래스를 상속할 수 없어 하나의 부모 클래스만 상속할 수 있습니다 ② 접근 제한자인 private와 default에 따라 상속 대상이 결정됩니다.
→ 같은 패키지 내에 부모와 자식이 존재한다면 상관없지만, 서로 다른 패키지에 부모와 자식이 존재한다면 default 접근 제한을 갖는 필드(멤버 변수)와 메소드는 상속 대상에서 제외됩니다.

→ private 접근 제한은 갖는 필드와 메소드 또한 상속 대상에서 제외됩니다.

새롭게 자식 클래스를 만들어 new 자식클래스() 객체를 생성하게 되면 자식이라는 인스턴스 속에는 "부모로부터 물려받은 필드와 메소드가 있는 인스턴스"와 "자식클래스에 정의되어 있는 인스턴스"가 생성됩니다.

부모 클래스가 큰 틀로 추상적이게 정의되어 있다면 자식 클래스에서 재정의(Overriding)하여 사용할 수 있습니다.

재정의 하는 방법은 간단하게 오버라이딩하려는 부모 클래스의 메소드와 자식 클래스의 메소드의

이름, 매개변수, 반환형식이 같아야 합니다.

부모 클래스의 메소드를 상속받으면서 자식 클래스가 메소드 재정의하는 경우가 발생하게 되는데

이때 메소드 재정의를 하게 되면 새로 생성된 객체는 기존 부모 클래스의 메소드로부터 메소드를 가져오는 것이 아니라

재정의된 자식 클래스의 메소드를 가져와 사용하게 됩니다.

■ 기본 숙제

클래스의 타입 변환에는 업캐스팅(Upcasting)과 다운캐스팅(Downcasting)이 있습니다.

1. 업캐스팅(Upcasting) 은 자바에서 객체의 서브클래스타입(자식 클래스)을 슈퍼클래스타입(부모클래스)으로 변환하는 과정을 말합니다. 업캐스팅의 경우 명시적인 캐스트 연산이 없이 생략할 수 있습니다.
단, 업캐스팅의 경우 부모에겐 없는 자식의 기능(메소드)을 호출할 수는 없습니다. - 컴파일 오류 발생
2. 다운캐스팅( DownCasting) 은 업캐스팅과 달리 명시적으로 캐스팅이 필요합니다.

부모 클래스의 객체를 자식 클래스 타입으로 변환하는 것으로, 객체를 추상적인 것에서 구체적(부모 -> 자식)으로 변환하여 자식 클래스에서 정의된 메소드나 필드에 접근할 수 있게 합니다.
단, 객체가 자식 클래스 타입이 아닌 경우에 - 런타임에 ClassCastException 발생
이런 오류를 막기 위해 "instanceof" 연산자를 이용하여 해당 객체가 특정 클래스의 인스턴스인지 확인할 수 있습니다.

다운캐스팅은 매우 강력하지만, 잘못 사용할 경우 프로그램의 안전성을 해칠 수 있으므로, 항상 다운캐스팅이 필요한지 확인하고, 예외 처리(try-catch)와 타입 검사를 통해 안정성을 확보해야 합니다.
쉽게 말해 업캐스팅은 부모타입으로 변경, 다운 캐스팅은 자식 타입으로 변경하는 것입니다.
■ 추가 숙제

P367 확인문제 3번

#3. 추상 클래스를 자식 클래스에서 재정의하는 문제입니다.

추상클래스로 정의된 HttpServlet 클래스를 부모클래스로 갖는 LoginServlet 클래스와 FileDownloadServlet 클래스를 만들고 각각 재정의를 해야 합니다.

추상 클래스인 HttpServlet과 추상 메소드인 service()

public class HttpServletExample { public static void main(String[] args) { method(new LoginServlet()); // 로그인합니다. method(new FildDownloadServlet()); // 파일 다운로드합니다. } public static void method(HttpServlet servlet) { servlet.service(); } }

문제의 요구사항에 맞춰 재정의를 해줍니다!!

LoginServlet클래스 메소드 재정의

메소드 오버라이딩을 하면 추상 클래스의 추상 메소드를 구현했다는 Implements 아이콘이 나옵니다.

오버라이딩을 할 때는 @Override 어노테이션을 생략해도 좋으나, 붙인다면 메소드가 재정의된 것인지 컴파일러가 확인해 주기 때문에 실수를 줄일 수 있습니다.

어노테이션을 추가한 FildDownloadServlet클래스 메소드 재정의

HttpServletExample 실행 결과

이번주도 공부하시느라 다들 수고가 많으십니다!!

다음 주는 여름 방학 ㅎㅎ 한 주 쉬고 더 파이팅입니다!!

같이 파이팅 해요!!!!

# data[].attributes.attachment_link.title
[혼공자] 4주차 (혼공학습단 12기)

# data[].attributes.attachment_link.description
혼공학습단 12기는 7/01일부터 8/18일까지 진행하는 스터디 활동입니다. ★ 이번주 공부할 내용#진도기본 숙제(필수)추가 숙제(선택)4주차(7/22 ~ 7/28)Chapter 07클래스의 타입 변환에는 어떤 것이 있는지 정리하고 공유하기p.367 07-3 확인 문제 3번을 풀고 풀이 과정 설명하기 🙋‍♂️Q&A: 신용권 저자님의 네이버 카페💻유튜브 강의: 👉전체 강의 목록 혼자 공부하는 자바(개정판)『혼자 공부하는 자바』가 더욱 풍성한 내용을 담아 돌아왔습니다!

# data[].attributes.body
페이스북에 인증했었는데 페들렛에도 인증해봅니다 ㅎㅎ

패들렛은 처음 써보는데 좋네요 ദ്ദി ˃ ᴗ ˂ )

혼공족장님 최고 ❤️

# data[].attributes.body
4주차 업로드 합니다!

# data[].attributes.attachment_link.title
[혼자 공부하는 R 데이터분석] 4주차_데이터 수집, 관측, 시각화

# data[].attributes.attachment_link.description
4-1. 데이터 수집하기데이터를 수집하는 방식 : 직접 vs 외부 데이터 수집가공을 거치지 않은 데이터 : 원시 데이터(=원시 자료)View(데이터프레임 변수명) 함수로 조회 (= 데이터 뷰어) 반드시 첫 글자 대문자로 작성가공하지 않은 원시 데이터만 확인 가능- 데이터 수집 방법데이터 종류사용법추가 설명직접 데이터 입력변수명 TXT 파일데이터 프레임으로 저장됨,header 기본값 False (변수명 임의지정)데이터 경로 표현시 슬래시 사용CSV 파일데이터 프레임으로 저장됨, header 기본값 TRUE-> 원시 데이터 변수명 없을 시 임의로 지정됨EXCELinstall.packages('readxl')library(readxl)데이터 프레임으로 저장됨, header 기본값 TRUE엑셀 여러 시트 중에..

# data[].attributes.body
페이스북 게시물이 스팸처리 되어서 패들릿에 다시 올립니다!

# data[].attributes.attachment_link.title
[혼공단12기][혼공프로] 새로 배우는 리스트와 딕셔너리

# data[].attributes.attachment_link.description
4주차부터는 혼공프로 기본편에서 고급편으로 넘어가게 되었다. 확실히 내용을 처음 접할 때 기본편보다 몇…

# data[].attributes.body
7월 23일에 페이스북에 올렸는데, 패들렛에도 업로드합니다!

# data[].attributes.attachment_link.title
[혼공학습단 12기 혼공네트] 혼자 공부하는 네트워크 week4

# data[].attributes.attachment_link.description
✏️기본 미션Ch.04(04-1) 확인 문제 1번(p.206), (04-2) 확인 문제 2번(p.225) 풀고 설명하기 ❓Ch.04(04-1) 확인 문제 1번(p.206)IP는 성능을 위해 비신뢰성, 비연결성 통신 특성을 가지고 있습니다. ❓ Ch.04 (04-2) 확인 문제 2번(p.225) TCP 쓰리 웨이 핸드셰이크는 세 개의 단계로 이루어진 TCP의 연결 수립 과정으로 아래와 같습니다.SYN 세그먼트 (A ➡️ B)SYN + ACK 세그먼트 (B ➡️ A)ACK 세그먼트 (A ➡️ B) ✏️선택 미션작업 관리자에서 프로세스별 PID 확인해 보기 📜내용 정리Chap04. 전송계층4.1 전송 계층 개요 : IP의 한계와 포트1) 신뢰할 수 없는 통신과 비연결형 통신- IP의 한계로 볼 수 있는 특징…

# data[].attributes.body
https://band-cowbell-3d6.notion.site/CH-5-38f20691e7e04caa974b479d4ee50da0

# 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
4주차 JS 과제 제출입니다.

# data[].attributes.attachment_link.readable_text
혼공js Chapter 05

벌써 4주차 입니다.

7월1일부터 이번주차까지....시간 정말 빨리 갑니다.

3주차에는 쓰다 보니 무지 길어져서 감기는 눈꺼풀을 치켜 뜨며 작성하였는데....

슬슬 나태해지려고 하는 순간 족장님의 간식을 받게 되어 다시 한번 힘내 봅니다.

함수란 어떤값을 입력하고, 입력한 값을 처리하여 출력한다.
함수란 로직, 연산등을 모아 둔 자료형입니다.
기타 프로그래밍 언어에는 함수가 모두들 존재하고, 언어에 약간이라도 관심이 있으시다면
int main(){
~~
return 0;
}
위의 코딩은 c-언어의 대표적인 메인 함수입니다.

int: 출력을 integer로 하겠다는 표시이고, return 0은 출력을 0으로 하겠다는 의미입니다.

본격적으로 자바스크립트에서의 함수에 대해 살펴보겠습니다.

익명함수
- 위의 c-언어 main함수와는 조금 다른 모양의 함수입니다. 형태는 비슷한데 입/출력에 대한 표기가 없습니다.
이런 형태의 함수를 익명함수라 합니다. 익명함수는 순차적인 코드 실행에서 해당 줄을 읽을 때 생성됩니다.
함수 1, 함수 2가 있을 경우 함수 1이 끝나고 함수 2가 읽을 때 생성 됩니다.

선언적 함수
- 선언적 함수는 순차적인 코드 실행이 일어나기 전에 생성됩니다.
익명함수와 차이가 있다면 함수가 호출되어 실행될 때 함수명이 출력된다는 것입니다.

매개변수와 리턴값
- 매개변수란 함수 호출 주"()"안에 작성하는 것을 말합니다.
- 리턴은 함수가 실행되고 나서 최종으로 반환하는 값을 말합니다.
- 인자를 하나 받고 결과를 리턴하는 기본적인 함수
: 매개변수 x에 값을 입력하고, 함수에서는 입력된 값을 제곱하여 출력하는 함수
- 인자를 2개 받고 리턴하는 함수
: 매개변수 a, b 두 개를 받아 a부터 b까지의 합을 구하여 리턴하는 함수
- 매개변수를 배열로 받는 함수
: 앞에 두개 함수는 정수값을 입력받아 처리하였지만 여기서는 배열을 입력하여 결과를 출력한다.

나머지 매개변수
:매개변수가 고정적이지 않은 함수를 가변 매개변수 함수라고 합니다.
이때 사용하는 매개변수가 나머지 매개변수입니다. 표현은 "..."으로 표기합니다.
: 고정 매개변수와 가변 매개변수를 동시에 사용하는 함수
음 이건 좀 신기하네요. 배열을 선언하지 않았는데 가변 매개변수들이 배열로 출력이 되네요.

- 함수는 하나인데 인자의 자료형이 여러 개(정수, 배열) 일 때에는typeof 연산자를 이용하여 정수인지 판단합니다.
배열을 typeof로 확인하면 Object로 출력된다. 따라서 배열일 경우는 Array.isArray() 매소드를 사용하여 구분합니다.

전개연산자
- 매개변수로 전달할 때 배열을 전개하여 함수의 매개변수로 전달하는 것을 전개 연산자를 사용합니다.
ex) 함수 이름(... 배열)

기본 매개변수
-함수의 매개변수로 항상 같은 매개변수를 여러 번 반복해서 입력하는 경우 사용합니다.
같은 함수를 호출할 때 매개변수 인자가 3개인데 이중 2개가 같은 값만 전달될 경우 사용합니다.
ex) 함수이름(매개변수, 매개변수=기본값, 매개변수=기본값)

Chapter05-02 함수 고급
다른 프로그래밍 언어는 함수를 지정된 위치에 만들어야 하지만, 자바스크립트는 '함수도 하나의 자료'라는 개념을 가지고 있어서 중간에 만들 수 있습니다. 이는 2010년 전후에 등장할 비동기 프로그래밍을 이끌었습니다.

콜백 함수
-자바스크립트는 함수도 하나의 자료형이므로 매개변수로 전달할 수 있습니다.
이렇게 매개변수로 전달하는 함수를 콜백 합수라고 합니다.
- 콜백 함수를 활용하는 함수 : forEach()
: 콜백 함수를 활동하는 가장 기본적인 함수는 froEach() 메소드입니다.
forEach() 메소드는 배열이 갖고 있는 함수로서 단순하게 배열 내부의 요소를 사용해서 콜백 함수를 호출해 줍니다.
- 콜백 함수를 활용하는 함수 : map()
: map() 메소드도 배열이 갖고 있는 함수입니다. map() 메소드는 콜백 함수에서 리턴한 값들을 기반으로 새로운 배열을 만드는 함수입니다.
- 콜백 함수를 활용하는 함수 : filter()
: filter() 메소드도 배열이 갖고 있는 함수입니다.filter() 메소드는 콜백 함수에서 리턴하는 값이 true인 것들만 모아서 새로운 배열을 만드는 함수입니다.

화살표 함수
- 위에서 살펴본 filter(), map() 함수처럼 단순한 형태의 콜백 함수를 쉽게 입력하고자 화살표 함수라는 함수 생성 방법도 있습니다. functio 키워드대신 화살표(=>)를 사용합니다.

타이머 함수
- 특정 시간마다 또는 특정 시간 이후에 콜백 함수를 호출할 수 있는 함수 입니다.
- setTimerout(함수, 시간) : 특정시간 후에 함수를 한 번 호출합니다.
- clearTimerout(타이머 ID) : setTimeout() 함수로 설정한 타이머를 제거합니다.
- setInterval(함수, 시간) : 특정 시간마다 함수를 호출합니다.
- clearInterval(타이머 ID) : setInterval() 함수로 설정한 타이머를 제거합니다.
** 갑자기 궁금한 것이.....
위 소스는 일초마다 실행하는 Interval과 Interval 종료를 위한 Timeout함수를 동시에 사용하는데..
clearInterval로 소멸시키는 건 이해되지만... 종료를 위한 Timeout은 소멸되지 않는 것 같습니다.
setTimout안애서 본인을 소멸시키지는 못할 테고... 밖에서 하면 SetTimeout이 실행되자마자 소멸되어 Interval이 무한루프 돌테고.... 아직 갈길이 멉니다..^^;
javascript 고수님의 한 수 가르침을 기다립니다.

즉시 호출 함수 충돌 방지 방법
- 변수가 존재하는 범위를 스코프라고 부르는데 스코프 내에서는 같은 이름의 변수를 사용할 경우 무조건 충돌이 발생하여 사용할 수 없습니다.
그러나 동일하게 사용하고 싶다면 스코프를 나누어 사용함으로써 충돌을 피할 수 있습니다.
위와 같이 블로 내보에서 같은 이름으로 변수를 선언하면 변수가 외부 변수와 통돌하지 않고 외부변수를 가리는 현상을섀도잉이라고 부릅니다.

아!!!! 드디어 방항인가?

벌써 한 달이 다 지나갔네요.. 시간 엄청 빠르네요.

한 주 쉰 뒤 다다음주에도 열심히~~~~!!!

# data[].attributes.attachment_link.description
혼공js Chapter 05벌써 4주차 입니다.7월1일부터 이번주차까지....시간 정말 빨리 갑니다.3주차에는 쓰다 보니 무지 길어져서 감기는 눈꺼풀을 치켜 뜨며 작성하였는데....슬슬 나태해지려고 하는 순간 족장님의 간식을 받게 되어 다시 한번 힘내 봅니다.Chapter05-01 함수함수란 어떤값을 입력하고, 입력한 값을 처리하여 출력한다.함수란 로직, 연산등을 모아 둔 자료형입니다.기타 프로그래밍 언어에는 함수가 모두들 존재하고, 언어에 약간이라도 관심이 있으시다면 int main(){ ~~return 0;}위의 코딩은 c-언어의 대표적인 메인 함수입니다.

# data[].attributes.body
https://m.blog.naver.com/shneige/223528487033

글이 삭제되어서 당황하고 있었는데

족장님 감사합니다~

사이트 둥글둥글 귀여워요~🤗🤗

# data[].attributes.body
족장님의 스윗한 댓글들 캡처라도 해둘껄 그랬어요 ㅠㅠㅠ 페이스북. 부셔버리고 싶다요....🤨🤬

# data[].attributes.body
혼공네또와크 4주차 제출합니다~!!!

# data[].attributes.attachment_link.title
[혼공학습단 12기]혼공 네트워크 스터디 4주차 - 전송 계층

# data[].attributes.attachment_link.description
저번주에는 혼자 공부하는 네트워크 3주차 스터디를 통해 컴퓨터 네트워크의 네트워크 계층 내용에 대해 알아보았다. 이번 4주차에는 OSI 7계층 기준으로 4계층에 해당하는 전송 계층에 대한 내용을 살펴보도록 하자!전송 계층 개요 - IP의 한계 그리고 포트전송 계층 개요 앞서 학습한 네트워크 계층의 IP는 신뢰할 수 없는 통신 + 비연결형 통신을 수행한다는 한계가 존재한다.

# data[].attributes.body
업로드 방식 때문에 고생이 많으십니다 방학동안 푹 쉬십시옹 ㅎ

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

# data[].attributes.attachment_link.description
시작하기 전에 함수 기본만 정리하고 가자!! 함수명 : 적절한 단어로 식별자 사용 규칙에 따라 만든다. 매...

# data[].attributes.body
여기서 다시 제출합니다.

요즘 스팸 때문에 SNS 운영측에서도 검열을 강화하고 있는 듯 합니다...

# data[].attributes.attachment_link.title
[혼공파] 4주차_혼공 네트워크

# data[].attributes.attachment_link.description
Ch.04(04-1) 확인 문제 1번 정답: 비신뢰성, 비연결형 해설: 통신 과정에서 패킷의 데이터가 손상되거나…

# data[].attributes.body
https://velog.io/@tcgyver/혼공혼공자바스크립트4

https://velog.io/@tcgyver/혼공자바스크립트5

https://velog.io/@tcgyver/혼공_자바스크립트6

# data[].attributes.attachment_link.readable_text
✅혼자 공부하는 자바스크립트 3주차 (7/15 ~ 7/21)
3주차 진도: Chapter 04
1) 기본 숙제(필수): 비파괴적 처리와 파괴적 처리의 의미와 장단점 설명하기
2) 추가 숙제(선택): p. 173 확인 문제 3번 문제 풀고, 풀이 과정 설명하기

1) 기본 숙제(필수): 비파괴적 처리와 파괴적 처리의 의미와 장단점 설명하기

비파괴적 처리: 처리 후에 원본 내용이 변경되지 않음,
장점- 원본을 저장하기 때문에 자료보호 가능,
단점- 메모리를 절약할 수 없음.

파괴적 처리: 처리 후에 원본 내용이 변경됨,
장점- 메모리 절약,
단점- 원본이 사라지기 때문에 오류가 났을 때 오류나기 전의 데이터를 알지 못해서 위험.

2) 추가 숙제(선택): p. 173 확인 문제 3번 문제 풀고, 풀이 과정 설명하기

① 비파괴적 처리 : strA값이 변경되지 않음
② 파괴적 처리 : arrayB값이 변경됨
③ 비파괴적 처리 : arrayC값이 변경되지 않음
④ 비파괴적 처리 : strD값이 변경되지 않음

# data[].attributes.attachment_link.description
✅혼자 공부하는 자바스크립트 3주차 (7/15 ~ 7/21)3주차 진도: Chapter 04기본 숙제(필수): 비파괴적 처리와 파괴적 처리의 의미와 장단점 설명하기추가 숙제(선택): p. 173 확인 문제 3번 문제 풀고, 풀이 과정 설명하기파괴적 처리: 처리 후에 원

# data[].attributes.body
족장님 화이팅!!

# data[].attributes.attachment_link.title
[혼공네트] 4주차_전송 계층과 TCP

# data[].attributes.attachment_link.description
IP와 연관된 통신 특성으로 알맞은 단어를 <보기>에서 골라보세요. <보기> 신뢰성, 연결형,…

# data[].attributes.body
3주차도 확인해주세요!!

# data[].attributes.attachment_link.title
곽소청바지 : 네이버 블로그

# data[].attributes.body
https://m.blog.naver.com/jndncj/223529904149

# data[].attributes.attachment_link.provider_name
네이버 블로그 | 새로운 집

# data[].attributes.attachment_link.readable_text
서버: 정보나 서비스를 저장하고 있다가 필요한 경우 네트워크를 이용해 사용자의 컴퓨터 혹은 스마트폰으로 전달해주는 컴퓨터

클라이언트: 정보를 서버 컴퓨터로부터 받아오는 컴퓨터

+ 웹서버: 컴퓨터의 특정 폴더에 담긴 HTML 파일로 웹사이트를 띄울 수 있도록 하는 프로그램

데이터 센터(IDC): 수많은 서버용 컴퓨터가 통신 설비, 냉각 장치와 함께 건물을 가득 메운 곳

서버호스팅: 데이터 센터를 소유하지 않은 기업이나 개인에게 센터 안의 서버용 컴퓨터(=호스티드 서버)를 임대해주는 서비스

데이터 센터의 컴퓨터를 한 대 빌려 그 컴퓨터가 서버 역할을 할 수 있도록 소프트웨어를 설치하고 설정(작업 공간 구성)한 뒤 온라인 서비스를 제공하기도 함.

사용 가능한 용량이 한정적이고 서버에 대한 많은 지식이 필요함

온프레미스: 회사에서 사내 전산실에 자체적으로 서버를 갖추고 관리하는 것, 서버를 자유롭게 구축하고 통제함

클라우드 컴퓨팅 서비스

서버, 저장소, 데이터베이스, 네트워킹, 소프트웨어 등과 같은 컴퓨팅 서비스를 인터넷(클라우드)으로 제공하는 방식

컴퓨터 한 대를 통째로 임대하는 것이 아니라 가상화 기술을 사용하여 수많은 컴퓨터를 클라우드 형태로 합친 다음 사용자들에게 필요한 만큼 작은 조각들로 떼어서 임대함

필요에 따라 사용량 탄력적 조절 가능, 서버 사용에 필요한 어려운 기술적 요소들도 제공받을 수 있음

제한된 자유도, 서버가 회사 외부에 있고 높은 비용이 듦

예) 아마존의 AWS (네트워킹을 기반으로 가상 컴퓨터와 스토리지, 네트워크 인프라 등의 다양한 서비스), 마이크로소프트의 애저, 구글의 GCP, 네이버의 NCP

IaaS(이아스, 아이아스): 클라우드를 이용해서 서버용 인프라, 즉 가상화된 서버 컴퓨터를 대여해주는 서비스

PaaS(파스): 애플리케이션을 개발하고 서비스하기 위해 필요한 서버, 운영체제, 개발 환경 등을 자동으로 설치하고 제공함으로써 사용자가 애플리케이션 개발에만 집중할 수 있도록 플랫폼을 제공하는 서비스

예) AWS의 일래스틱 빈스토크나 헤로쿠 등

SaaS(싸스): 소프트웨어가 이미 완성된 형태로 제공되는 클라우드 서비스

예) 구글 드라이브, 네이버 MYBOX, 드롭박스, MS 오피스 365

웹 브라우저: 웹 사이트를 열어 인터넷 서핑을 하는 데 사용되는 소프트웨어, html이란 형식의 문서를 읽는 데 사용 됨

# data[].attributes.attachment_link.title
[혼공얄코] 4주차_챕터3

# data[].attributes.attachment_link.description
4주차 기본 숙제- Ch.03 마무리 용어 정리 03-1 서버: 정보나 서비스를 저장하고 있다가 필요한 경우 네트...

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

모두 즐거운 방학 보내시길 바라요!

앞으로도 파이팅입니다~

# data[].attributes.attachment_link.description
주차진도기본 숙제추가 숙제4주차(7.22~7.28)Chapter 7함수의 유형을 정리하여 공유하기p226 7-5 직접 해 보는 손코딩 예제 테스트 후 apple 출력하고 종료한 화면 캡처하기. 왜 무한대로 출력되지 않는지 이유에 대해 생각하고 정리해 보기 함수의 유형을 정리하여 공유하기 >분류특징예시매개변수가 없는 함수매개변수 X. void로 부재 명시(생략 가능)호출시 괄호만 사용(argument X)int get_num(void); or int get_num();반환값이 없는 함수반환값 X.

# data[].attributes.attachment_link.readable_text
5-1 결정트리

문제 : 화이트와인, 레드와인 구분하기
특성 : 도수, 당도, pH

1) 로지스틱 회귀로 와인 분류

2) 결정트리

결정트리
예/아니오에 대한 질문을 이어나가면서 정답을 찾는 학습알고리즘
-> 비교적 예측 과정과 이유를 설명하기 쉽다.

가지치기

결정트리가 훈련세트에 과대적합되는 것을 억제하는 효과
-> 트리의 최대깊이를 지정한다.

특성값의 스케일이 결정 트리 알고리즘에 아무런 영향을 미치지 않음 -> 결정트리는 표준화 전처리 과정이 필요없다.
(전처리 전과 후 점수가 동일)

결정트리는 어떤 특성이 가장 유용한지 특성중요도를 출력할 수 있다.

5-2 교차 검증과 그리드 서치

먼저, 일반화 성능을 올바르게 예측하기 위해 훈련세트, 검증세트, 테스트 세트로 나누기
1) 훈련세트로 훈련하고, 검증세트로 모델평가
2) 최적의 매개변수 선택하여, 전체 훈련세트(훈련+검증)로 다시 훈련
3) 테스트 세트로 최종 점수 평가

검증세트로 인한 훈련세트 감소 -> 교차검증 이용

교차검증 도구 1) 그리드 서치

교차검증 도구 2) 랜덤서치

주어진 범위에서 고르게 샘플링하여 매개변수 탐색

5-3 트리의 앙상블

정형데이터에 뛰어난 성과를 내는 알고리즘 "앙상블 학습"

1) 랜덤 포레스트

데이터 세트에서 중복을 허용하여 데이터를 샘플링하는 부트스트랩 방식을 사용

부트스트랩 샘플에 포함되지 않는 OOB샘플을 검증 세트로 활용

2) 엑스트라 트리

랜덤 포리스트와 비슷하나, 부트스트랩 샘플을 사용하지 않고 전체 훈련 세트를 사용한다.

결정 트리의 노드를 랜덤하게 분할하여 훈련속도가 빠르다.

3) 그레이디언트 부스팅

깊이가 얕은 결정트리를 사용하여 높은 일반화 성능을 기대할 수 있는 방법으로, 과대적합에 매우 강하다.

4) 히스토그램 기반 그레이디언트 부스팅

그레이디언트 부스팅의 속도를 개선한 것으로, 훈련 데이터를 256개 정수 구간으로 나누어 빠르고 높은 성능을 낸다.
(가장 뛰어난 앙상블 학습으로 평가 받는 알고리즘)

4주차 학습 일기

이번 주차에는 많은 알고리즘이 등장해서, 많이 혼란스러웠다.
간단한 특징이나 차이점 정도 이해한 것 같은 느낌...ㅎㅎ
그보다 현재 맡은 업무에서도 학습데이터가 줄어든다는 부분을 교차 검증으로 보완해볼 수 있는지 고민해봐야겠다.
(이미 그렇게 하고 있는데 잘 몰랐던 걸지도... 검토해봐야지...)
알면 알수록 복잡하고 어려운 인공지능의 세계... @_@

# data[].attributes.attachment_link.title
[혼공머신] 4주차_ 트리 알고리즘

# data[].attributes.attachment_link.description
혼공머신 4주차 Chapter 5) 트리 알고리즘 5-1 결정트리 문제 : 화이트와인, 레드와인 구분하기 특성 : 도수, 당도, pH 1) 로지스틱 회귀로 와인 분류 2) 결정트리 결정트리 예/아니오에 대한 질문을 이어나가면서 정답을 찾는 학습알고리즘 -> 비교적 예측 과정과 이유를 설명하기 쉽다.

# data[].attributes.body
이제 여름 방학 시작이당,, 페북 업로드 땜에 혼공족장님 탈모 생길까봐 걱정 ㅠㅠ 넘 괘념치 마시길,,

# data[].attributes.body
늦게나마 제출해봅니다🥹

# data[].attributes.body
혼공s 4주차 입니다

# data[].attributes.attachment_link.title
집을 원하는 자 : 네이버 블로그

# data[].attributes.body
혼자 공부하는 자바스크립트 4주차 Chapter 05

# data[].attributes.attachment_link.description
[기본 미션] p. 202 예제를 실행하여 2022년이 윤년인지 확인하는 결과 인증하기 보통 2월은 28일까지 있지만 몇년에 한 번 29일까지 있기도 하다.이런 해를 윤년이라고 부르고 다음과 같은 특징이 있다. 4로 나누어 떨어지는 해는 윤년이다.하지만 100으로 나누어 떨어지는 해는 윤년이 아니다.하지만 400으로 나누어 떨어지는 해는 윤년이다. [선택 미션] p. 240 확인 문제 1번 풀고, 풀이 과정 설명하기 filter 함수란?자바 스크립트의 배열 메서드 중 하나로, 주어진 조건을 만족하는 배열의 요소들만을 포함하는 새로운 배열을 생성한다.이 메서드는 콜백 함수와 함께 사용되며, 콜백 함수는 배열의 각 요소에 대해 호출되어 조건을 검사한다. +[선택 미션]을 풀 때…

# data[].attributes.body
혹시 몰라 4주차 다시 제출합니다..

# 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
개인적으로 패들렛이 페이스북보다 깔끔하고, 다른 분들 글 보기 더 편한 것 같아서 좋네요!!

# data[].attributes.attachment_link.readable_text
👨‍💻 개인 공부 기록용 블로그 입니다.
💡 틀린 내용이나 오타는 댓글, 메일로 제보해주시면 감사하겠습니다!! (__)

50% 완주했다고 기프티콘을 또 보내주셨다... 공부도 하고 간식도 먹고 응원도 받을 수 있는 프로그램이 있다??? 그것은 바로 혼공학습단. 이렇게 퍼주시면 다음 기수도 할 수 밖에 없겠죠??

오늘 공부할 내용은 테이블과 뷰 이다. 이 책에서도 그렇고 보통 엑셀에 많이 비유하는 것 같다. 테이블은 엑실의 시트와 상당히 비슷한 구조이고, 뷰는 단어 뜻 그대로 보여지는 가상의 테이블이다. 즉, 앞에서 배운 SELECT로 확인되는 것이 뷰라고 보면 간편하다. 설계 내용도 조금 섞여있는데, 데이터베이스 설계는 직접 해봐야 느는 것 같다. 정규화 같이 관련된 이론들이 꽤나 복잡하기도 하고... 그래서 이번 챕터는 실습과 정리 위주로 진행하려고 한다.

책 예제에 있는 SQL 문을 모아서 실행시켜보고, 하나씩 뜯어보자.

DROP DATABASE IF EXISTS naver_db ; CREATE DATABASE naver_db ; USE naver_db ; DROP TABLE IF EXISTS member ; CREATE TABLE member ( mem_id CHAR ( 8 ) NOT NULL PRIMARY KEY , mem_name VARCHAR ( 10 ) NOT NULL , mem_number 	TINYINT NOT NULL , addr CHAR ( 2 ) NOT NULL , phone1 CHAR ( 3 ) NULL , phone2 CHAR ( 8 ) NULL , height TINYINT UNSIGNED NULL , debut_date DATE NULL ); DROP TABLE IF EXISTS buy ; CREATE TABLE buy ( num INT AUTO_INCREMENT NOT NULL PRIMARY KEY , mem_id CHAR ( 8 ) NOT NULL , prod_name CHAR ( 6 ) NOT NULL , group_name CHAR ( 4 ) NULL , price INT UNSIGNED NOT NULL , amount SMALLINT UNSIGNED NOT NULL , FOREIGN KEY ( mem_id ) REFERENCES member ( mem_id ) ); INSERT INTO member VALUES ( 'TNC' , '트와이스' , 9 , '서울' , '02' , '11111111' , 167 , '2015-10-19' ); INSERT INTO member VALUES ( 'BLK' , '블랙핑크' , 4 , '경남' , '055' , '22222222' , 163 , '2016-8-8' ); INSERT INTO member VALUES ( 'WMN' , '여자친구' , 6 , '경기' , '031' , '33333333' , 166 , '2015-1-15' ); INSERT INTO buy VALUES ( NULL , 'BLK' , '지갑' , NULL , 30 , 2 ); INSERT INTO buy VALUES ( NULL , 'BLK' , '맥북프로' , '디지털' , 1000 , 1 ); INSERT INTO buy VALUES ( NULL , 'APN' , '아이폰' , '디지털' , 200 , 1 );

데이터 타입은 지난주에 열심히 공부했으니까 전부 패스한다. AUTO_INCREMENT NOT NULL PRIMARY KEY 를 먼저 보자. AUTO_INCREMENT는 데이터가 삽입될 때마다 자동으로 하나씩 값을 올린다는 의미이다. 즉, 값을 따로 지정하지 않아도 DBMS가 알아서 데이터가 삽입되는 시점에 하나씩 값을 올려 저장한다. NOT NULL은 해당 값이 NULL이어서는 안된다는 뜻이다. NULL을 넣으려고 할 경우 오류가 발생한다. PRIMARY KEY 는 해당 속성을 PK로 지정한다는 의미이다. 뒤에 나오겠지만 PK는 테이블의 고유성을 보장하는 제약 조건이고, 하나의 테이블에 하나만 존재할 수 있는 행의 식별자 역할을 하기 때문에 자동으로 NOT NULL로 지정된다.

FOREIGN KEY(mem_id) REFERENCES member(mem_id)의 경우, 이 테이블의 mem_id 열을 member 테이블의 mem_id 열과 외래 키 관계로 연결한다는 의미이다. 즉 이 테이블의 mem_id는 꼭 member 테이블의 mem_id에도 값이 있어야 한다는 뜻이다. 그래서 위 SQL문을 실행시켜보면 맨 마지막 INSERT에서 오류가 발생한다. APN이라는 mem_id는 member 테이블에 존재하지 않기 때문이다.

SELECT 문으로 확인해보면 아래와 같이 나머지 데이터는 잘 들어가 있는 것을 확인할 수 있다.

앞에서 PK는 테이블의 고유성을 보장하는 제약 조건 이라고 언급했었는데, 제약 조건이 무엇인지 알아보자.

제약조건(Constraint)은 데이터의 무결성을 지키기 위해 제한하는 조건이다. 즉, 데이터에 결함이 없음을 보장하기 위한 조건으로, 데이터가 중복되지 않는다거나 일정 조건을 따르는 등 규칙에 맞는지 검사할 수 있다. PK는 중복되지 않고 비어있지 않는다는 제약조건을 가지기 때문에, 실수로 중복된 아이디를 넣으려고 해도 입력 조차 불가능하다.

앞에서 FOREIGN KEY(mem_id) REFERENCES member(mem_id) 와 같이 두 테이블을 연결하는 예제가 있었는데, 이런 외래 키에도 제약조건이 존재한다. 외래 키(FK)가 설정된 열은 보통 다른 테이블의 기본 키(PK)와 연결되기 때문에, 이 FK 열은 NULL이 될 수 없다. 그렇다고 FK가 반드시 NULL이 될 수 없는 것은 아니다. PK 말고도 고유 키 (UNIQUE KEY) 에 연결되는 경우도 있기 때문이다. 고유 키는 고유성을 가지지만 NULL값을 허용하기에, FK가 NULL이 될 수 있다. 잘 생각해보면 FK가 고유성을 가지는 열과 연결되는 것은 당연하다. 조인 하는 시점에 열끼리 연결되어야 하는데, FK가 고유성을 가지지 않는 열과 연결되어 있다면 어떤 열끼리 이어야 할 지 모호해지기 때문이다.

앞 문단에서 고유 키(UNIQUE KEY)에 대해 잠깐 언급했는데, 이 UK는 중복되지 않는 유일한 값을 입력해야 하는 조건이다. PK와 거의 비슷하지만, NULL을 허용한다. 또한, UK는 한 테이블에서 여러 개를 지정해도 상관 없다.

체크(Check)라는 제약조건도 있다. 입력되는 데이터가 특정 조건에 맞는지 검사한다. 앞에서 member 테이블에 height라는 열을 정의했는데, height TINYINT UNSIGNED NULL CHECK (height >= 100) 과 같이 정의한다면 100 미만의 값은 height에 입력할 수 없게된다. CHECK (height IN ('150', '160')) 과 같이 IN을 활용하는 것도 가능하다. 이런 경우는 height 에 150이나 160만 입력 가능하다.

마지막으로 기본값 정의(DEFAULT)는 자동으로 입력될 값을 미리 지정해놓는 방법이다. 값을 입력할 때 해당 열을 비워뒀다면, 자동으로 DEFAULT로 지정된 값을 채워 넣는다. INSERT할 때 VALUES에 default 라고 적으면 해당 열은 자동으로 기본 값으로 채워진다.

뷰(View)는 데이터베이스 개체 중 하나이다. 목차에서 가상의 테이블 이라고 언급했듯, 뷰는 실체가 없다. SELECT 문의 결과에 별명을 짓는다고 생각하면 편하다. 이는 쿼리의 재사용성을 늘리기 위한 기능인데, 엄청나게 복잡한 SELECT문을 작성하고 그것을 뷰로 만들어버리면 복잡한 쿼리를 단순하게 만들 수 있고, 데이터베이스의 보안성과 관리 효율성을 높이는 데 도움을 준다.

뷰의 특징

1. 데이터 추상화: 뷰는 실제 데이터베이스 테이블을 감추고, 사용자에게 필요한 데이터만을 보여준다. 이를 통해 데이터베이스 구조의 복잡성을 숨길 수 있다.

2. 재사용성: 자주 사용되는 복잡한 쿼리를 뷰로 정의해 두면, 이후에는 간단한 SELECT 문으로 뷰를 호출하여 동일한 결과를 얻을 수 있다.

3. 보안: 뷰를 사용하면 민감한 데이터에 대한 접근을 제한할 수 있다. 예를 들어, 특정 컬럼을 포함하지 않은 뷰를 정의함으로써 민감한 정보를 감출 수 있다.

4. 데이터 일관성: 뷰를 사용하면 여러 테이블에 걸친 데이터를 일관성 있게 조회할 수 있다.

뷰 생성

뷰는 CREATE VIEW 문을 사용하여 생성할 수 있다. 예를 들어, member 테이블과 buy 테이블에서 특정 정보를 조회하는 뷰를 생성해보자.

CREATE VIEW member_buy_view AS SELECT m . mem_name , m . addr , b . prod_name , b . price FROM member m JOIN buy b ON m . mem_id = b . mem_id ;

이 뷰는 member 테이블과 buy 테이블을 조인하여 각 멤버가 구매한 상품의 정보를 조회하는 역할을 한다. 이제 이 뷰를 간단한 SELECT 문으로 호출할 수 있다. DESCRIBE 문을 통해 정의된 뷰의 구조 또한 확인할 수 있다.

SELECT * FROM member_buy_view ; DESCRIBE member_buy_view ;

뷰 수정

뷰를 수정하려면 CREATE OR REPLACE VIEW 문을 사용하면 된다. 기존 뷰를 대체할 수 있으며, 새로운 정의를 제공할 수 있다.

CREATE OR REPLACE VIEW member_buy_view AS SELECT m . mem_name , m . phone1 , b . prod_name , b . price FROM member m JOIN buy b ON m . mem_id = b . mem_id ;

이제 member_buy_view 뷰는 addr 대신 phone1 정보를 포함하게 된다.

뷰 삭제

뷰가 더 이상 필요하지 않다면, DROP VIEW 문을 사용하여 삭제할 수 있다.

DROP VIEW IF EXISTS member_buy_view ;

이 명령을 실행하면 member_buy_view 뷰가 데이터베이스에서 삭제된다.

확인 문제

정답은 2번 CREATE OR REPLACE VIEW 이다. 기존 뷰가 없으면 생성하고, 있으면 덮어쓰는 구문이다.

Previous Next

# data[].attributes.body
4주차 과제 다시 제출합니다~

즐거운 여름방학 되셔용 😎

# data[].attributes.body
댓글울 이제서야 확인했네요ㅎㅎ 4주차 과제입니닷!

# data[].attributes.attachment_link.readable_text
[필수과제]

교차검증은 검증세트를 떼어 내어 평가하는 과정을 여러 번 반복하는 과정을 의미한다.

교차 검증을 통해 얻은 점수들의 평균으로 최종 검증 점수를 얻을 수 있다.

일반적을 5-폴드 교차 검증이나 10-폴드 교차검증을 많이 사용하며, 이를 통해 데이터의 80~90%까지 훈련에 사용할 수 있다.

[선택과제]

랜덤 포레스트(Random Forest)

랜덤 포레스트는 가장 대표적인 앙상블 학습 알고리즘으로, 결정 트리를 훈련하기 위해 부스트랩 샘플을 만들고 전체 특성 중 일부를 랜덤하게 선택하여 결정트리를 만든다.

엑스트라 트리(Extra Tree)

엑스트라 트리는 랜덤 포레스트와 매우 비슷하지만 부트스트랩 샘플을 사용하지 않고 노드를 분할할 때 최선이 아니라 랜덤하게 분할한다. 따라서 랜덤 포레스트보다 훈련 속도가 빠르지만 보통 더 많은 트리가 필요하다.

그레이디언트 부스팅(Gradient Boosting)

그레이디언트 부스팅은 깊이가 얕은 트리를 연속적으로 추가하여 손실 함수를 최소화한다.

히스토그램 기반 부스팅 (Histogram - based Boosting)

히스토그램 기반 부스팅은 훈련 데이터를 256개의 구간으로 변환하여 사용하기 때문에 노드 분할 속도가 매우 빠르다.

너무... 덥다! 하지만 이번주만 버티면 럭키비키 방학,,,🥹 벌써 혼자 책을 절반이나 공부했다는게 완전 멋지잖아,,,! 이제 바쁘지도 않으니 방학동안 푹- 쉬고 다시 남은 절반도 잘 마무리해봐야겠다~!

# data[].attributes.attachment_link.title
[혼공머신]4주차_트리 알고리즘

# data[].attributes.attachment_link.description
필수과제]교차검증은 검증세트를 떼어 내어 평가하는 과정을 여러 번 반복하는 과정을 의미한다.교차 검증을 통해 얻은 점수들의 평균으로 최종 검증 점수를 얻을 수 있다.일반적을 5-폴드 교차 검증이나 10-폴드 교차검증을 많이 사용하며, 이를 통해 데이터의 80~90%까지 훈련에 사용할 수 있다. [선택과제]랜덤 포레스트(Random Forest)랜덤 포레스트는 가장 대표적인 앙상블 학습 알고리즘으로, 결정 트리를 훈련하기 위해 부스트랩 샘플을 만들고 전체 특성 중 일부를 랜덤하게 선택하여 결정트리를 만든다.

# data[].attributes.body
혼공s 4주차 제출합니다!!

https://gini1031.tistory.com/6

# data[].attributes.attachment_link.readable_text
테이블에는 여러 제약 조건을 걸 수 있다. 제약 조건(constraint)이란, 데이터의 무결성을 지키기 위해 제한하는 조건을 말한다. 즉, 데이터에 결함이 없도록 도와주는 역할을 하는 것이다. 제약 조건은 데이터의 무결성과 일관성을 유지하기 위해 필요하다. 제약 조건은 테이블 내에 저장된 데이터가 특정 규칙을 따르도록 규칙을 정의할 수 있다. 정의 내릴 수 있는 대표적인 제약 조건은 다음과 같다.

그럼 이제 위의 제약 조건에 대해 하나씩 이해해보자.

1-1. PRIMARY KEY

PRIMARY KEY는 가입 회원의 아이디, 학생들의 학번 등 겹칠 수 없는 고유한 값을 저장할 때 사용하는 제약 조건으로써, 입력되는 값은 중복될 수 없다. 또한 NULL 값이 허용되지 않기 때문에 꼭 값을 입력해주어야 한다. 대부분의 테이블은 이 PRIMARY KEY 제약 조건을 가지며, 기본 키로 선정된 열은 자동으로 클러스터형 인덱스가 생성된다.

클러스터형 인덱스란?
데이터베이스에서 테이블의 데이터가 물리적으로 정렬되어 저장되는 방식의 인덱스이다.
(자세한 내용은 다음 블로그에서 다루도록 하겠다)

또한, 각 테이블은 PRIMARY KEY를 오로지 한 개만 가질 수 있다. 즉, 상황에 따라 알맞은 PRIMARY KEY를 선정하는 것이 중요하다.

PRIMARY KEY를 설정하는 방법은 크게 2가지가 있다.
1. CREATE TABLE에서 설정
가장 먼저, 테이블 생성 시에 PRIMARY KEY를 함께 설정해주는 방식이다. 코드는 다음과 같이 작성해주면 된다.

CREATE TABLE table_name1 ( column_name1 data_type PRIMARY KEY, -- primary key 지정 column_name2 data_type, column_name3 data_type ); CREATE TABLE table_name2 ( column_name4 data_type, column_name5 data_type, column_name6 data_type, PRIMARY KEY(olumn_name4) -- primary key 지정 );
2. ALTER TABLE에서 설정
만일 테이블을 생성한 후 primary key를 나중에 설정하고 싶다면, ALTER TABLE을 사용해주면 된다. 코드를 작성하는 방법은 다음과 같다.

ALTER TABLE table_name ADD CONSTRAINT PRIMARY KEY(column_name);

위의 코드는 column_name의 열을 primary key로 지정하는 constraint(제약 조건)을 추가하여 테이블을 수정하겠다는 의미이다.

1-2. FOREIGN KEY

FOREIGN KEY의 경우, 두 테이블에 대한 관계를 정의하고, 참조 무결성을 유지하기 위해 필요하다. 외래 키는 다른 테이블의 기본 키를 참조한다는 것이 특징이다. 이때 기본 키를 지니고 있는 테이블을 기준 테이블, 외래 키를 지니고 있는 테이블을 참조 테이블이라 한다. 기본 키와 외래 키의 관계로 인해, 기준 테이블에 존재하지 않은 키는 절대 참조 테이블에 존재할 수 없다는 특징을 가지고 있다. 이것이 외래 키가 참조 무결성을 유지하는 이유이다.

FOREIGN KEY를 설정하는 방법을 한 번 알아보자.
1. CREATE TABLE에서 설정
다음은 테이블 생성 시에 FOREIGN KEY를 설정하는 코드이다. FOREIGN KEY를 설정하기 위해선 두 개의 테이블이 필요하며, 기준 테이블에 PRIMARY KEY가 존재해야 한다는 것을 유의하자.

CREATE TABLE table_name1 ( -- 기준 테이블 column_name1 data_type PRIMARY KEY, -- primary key 지정 column_name2 data_type, column_name3 data_type, ); CREATE TABLE table_name2 ( -- 참조 테이블 column_name1 data_type, column_name5 data_type, column_name6 data_type, FOREIGN KEY(column_name1) REFERENCES table_name1(column_name1) -- foreign key 지정 );

이때, PRIMARY KEY의 열 이름과 FOREIGN KEY의 열 이름이 반드시 동일하지 않아도 괜찮다.
2. ALTER TABLE에서 설정
PRIMARY KEY와 동일하게, ALTER TABLE에서 FOREIGN KEY를 설정하는 방법도 있다.

ALTER TABLE table_name1 ADD CONSTRAINT FOREIGN KEY(column_name1) REFERENCES table_name2(column_name1);

만일 두 테이블이 기본 키-외래 키 관계를 맺고 있다면, 어느 한 쪽의 데이터를 수정하거나 행을 삭제하고자 해도 되지 않는다는 것을 볼 수 있다. 한쪽 테이블에만 정보가 반영되고, 다른 한쪽 테이블에는 그 정보가 반영되지 않기 때문이다. 그러나, 한쪽 테이블을 수정해도 다른 테이블에 수정된 정보를 함께 반영되도록 할 수 있는 기능이 있다. 바로 ON UPDATE CASCADE와 ON DELETE CASCADE이다.

먼저, ON UPDATE CASCADE는 UPDATE문을 실행시켰을 때, 수정된 정보를 두 테이블에 모두 반영할 수 있도록 도와준다. ON DELETE CONCADE는 DELETE문을 실행시켰을 때, 수정된 정부를 두 테이블에 모두 반영할 수 있도록 도와준다.

사용 방법은 다음과 같다.

ALTER TABLE table_name1 ADD CONSTRAINT FOREIGN KEY(column_name1) REFERENCES table_name2(column_name1) ON UPDATE CASCADE ON DELETE CASCADE;

1-3. UNIQUE

UNIQUE(고유 키)는 특정 값이 테이블 내에서 유일하도록 보장해준다. 중복 값은 허용하지 않지만, NULL 값은 허용한다는 것이 특징이다. 이것이 PRIMARY KEY와 다른 점이다. NULL 값은 1개만 있어도, 여러 개가 있어도 혹은 아예 없어도 상관없다.

사용 방법은 다음과 같다.

CREATE TABLE table_name ( column_name1 data_type PRIMARY KEY, column_name2 data_type, column_name3 data_type, column_name4 data_type UNIQUE );

1-4. CHECK

체크 제약 조건은 특정 데이터 값이 입력되지 않도록 하거나 특정 데이터 값만 입력되도록 도와주어, 필요로 하는 데이터만 테이블 내에 존재하도록 할 수 있다. 체크 제약 조건을 사용하는 방법은 다음과 같다.

CREATE TABLE table_name ( column_name1 data_type PRIMARY KEY, column_name2 data_type, column_name3 data_type CHECK (condition) -- check 제약 조건 설정 );

테이블 생성 후 조건에 맞지 않는 데이터를 넣게 될 경우, 에러 메세지가 발생하며, 테이블에는 아무런 데이터가 들어가지 않게 된다.

1-5. DEFAULT

기본값 정의는 값을 입력하지 않을 경우, 이전에 지정된 기본 값이 자동으로 입력될 수 있도록 도운다. DEFAULT 제약 조건을 사용하는 방법은 다음과 같다.

CREATE TABLE table_name ( column_name1 data_type PRIMARY KEY, column_name2 data_type DEFAULT (value), -- default 값 정의 column_name3 data_type );

다음의 default 값이 정해진 테이블에 값을 입력할 땐 다음과 같이 코드를 작성해주면 된다.

INSERT INTO table_name VALUES (data1, data2, data3); INSERT INTO table_name VALUES (data1, default, data2);

만일 넣어주어야 하는 값이 있다면 그 값을 써주면 되고, default 값을 사용하려 한다면 default 키워드를 써주면 된다.

1-6. NULL / NOT NULL

NOT NULL은 특정 열이 NULL 값을 가질 수 없도록 도와준다. 예를 들어 PRIMARY KEY의 경우, key로 지정되어야 할 값들이 무조건 들어가야 하기 때문에 NOT NULL로 지정되어야 한다. 만일 테이블을 생성할 때 NOT NULL을 설정하지 않으면 기본값으로는 NULL이 들어가지만, 가독성을 위해 NULL / NOT NULL을 써주는 것이 좋다.

2. 숙제

2-1. 기본 숙제

테이블 생성

데이터 삽입

테이블 확인

2-2. 추가 숙제

# data[].attributes.attachment_link.title
[혼공s] 4주차 학습 내용 정리

# data[].attributes.attachment_link.description
1. 견고한 테이블을 위한 제약 조건테이블에는 여러 제약 조건을 걸 수 있다. 제약 조건(constraint)이란, 데이터의 무결성을 지키기 위해 제한하는 조건을 말한다. 즉, 데이터에 결함이 없도록 도와주는 역할을 하는 것이다. 제약 조건은 데이터의 무결성과 일관성을 유지하기 위해 필요하다. 제약 조건은 테이블 내에 저장된 데이터가 특정 규칙을 따르도록 규칙을 정의할 수 있다.

# data[].attributes.body
조금 늦어버렸지만 4주차 제출합니다!

# data[].attributes.attachment_link.readable_text
저번주에 시험치고 너무 힘들어서 냅다 쉬어버렸더니.. 늦어버렸지만 그래두 열심히 공부하고 정리해서 올려봅니당!

개발자들이 운영체제를 알아야 하는 이유!

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

운영체제가 하는 일은 실행할 프로그램을 메모리 주소가 겹치지 않도록 적당한 공간의 메모리에 적재하고, 더 이상 실행되지 않는 프로그램을 메모리에서 삭제하며 지속적으로 메모리 자원을 관리한다. 또한 프로그램이 실행되려면 반드시 CPU가 필요하다. 하지만 CPU는 한 프로그램씩만 사용할 수 있기 때문에 운영체제는 최대한 공정하게 여러 프로그램에 CPU 자원을 할당한다.

정리하자면 운영체제는 응용 프로그램에 필요한 자원을 할당하고, 응용 프로그램이 올바르게 실행되도록 관리하는 역할을 맡고 있다.

운영체제가 없다면 간단한 프로그램이라도 하드웨어를 조작하는 코드를 개발자가 모두 직접 작성해야 한다.

운영체제에서 매우 중요한 개념인 커널과 응용 프로그램이 운영체제로부터 어떻게 도움을 받으며 실행되는지를 이해하기 위해 이중 모드와 시스템 호출이라는 개념을 알아볼 것이다.

운영체제의 핵심적인 서비스로는 자원에 접근하고 조작하는 기능과 프로그램이 올바르고 안전하게 실행되게 하는 기능인데, 이러한 운영체제의 핵심 서비스를 담당하는 부분을 커널 이라고 한다.

CPU가 시스템 호출을 처리하는 순서는 인터럽트 처리 순서와 유사하다. 시스템 호출을 발생시키는 명령어가 실행되면 CPU는 지금까지의 작업을 백업하고, 커널 영어 내에 시스템 호출을 수행하는 코드를 실행한 뒤 다시 기존에 실행하던 응용 프로그램으로 보귀하여 실행을 계속해 나간다.

프로그램은 실행되기 전까지는 그저 보조기억장치에 있는 데이터 덩어리이지만, 보조기억장치에 저장된 프로그램을 메모리에 적재하고 실행하는 순간 그 프로그램은 프로세스가 된다.

사용자가 볼 수 있는 공간에서 실행되는 프로세스를 포그라운드 프로세스, 사용자가 보지 못하는 뒤편에서 실행되는 프로세스를 라고 한다. 백그라운드 프로세스 중에서도 사용자와 직접 상호작용할 수 있는 백그라운드 프로세스가 있고, 상호작용하지 않는 백그라운드 프로세스가 있는데, 이를 유닉스에서는 데몬이라하고 윈도우에서는 서비스 라고 한다.

프로세스가 생성되면 커널 영역에 PCB가 생성된다고 하였다. 사용자 영역에는 프로세스가 어떻게 배치되는가?

일반적으로 힙 영역을 메모리에서 낮은 주소에서 높은 주소로 할당되고, 스택 영역은 높은 주소에서 낮을 주소로 할당된다.

프로세스는 모두 저마다의 상태가 있다. 운영체제는 이런 프로세스의 상태를 PCB에 기록하여 관리한다.

컴퓨터를 사용할 때 여러 프로세스들이 빠르게 번갈아서 실행이 되는데, 그 과정에서 하나의 프로세스는 여러 상태를 거치며 실행된다. 운영체제는 프로세스의 상태를 PCB를 통해 인식하고 관리한다. 프로세스의 상태를 표현하는 방식은 운영체제마다 조금씩 차이가 있지만, 프로세스가 가질 수 있는 대표적인 상태는 아래와 같다.→

fork와 exec는 시스템 호출이다. fork는 자기 자신 프로세스의 복사본은 만드는 시스템 호출이고, exec는 자신의 메모리 공간을 새로운 프로그램으로 덮어쓰는 시스템 호출이다. 자식 프로세스는 부모 프로세스의 복사본이기 때문에 부모 프로세스의 자원들이 자식 프로세스에 상속된다. 자식 프로세스는 exec 시스템을 호출하여 새로운 프로그램으로 전환된다. 코드 영역과 데이터 영역의 내용이 실행할 프로그램의 내용으로 바뀌고, 나머지 영역은 초기화 된다.

즉, 부모가 자식 프로세스를 실행하여 프로세스 계층 구조를 이루는 과정은 fork와 exec가 반복되는 과정이다.

프로세스를 구성하는 실행의 흐름 단위를 스레드라고 한다.

스레드는 프로세스 내에서 각기 다른 스레드 ID, 프로그램 카운터 값을 비롯한 레지스터 값, 스택으로 구성되어 있다. 각자 프로그램 카운터 값을 비롯한 레지스터 값, 스택을 가지고 있기에 스레드마다 각기 다른 코드를 실행할 수 있다.

프로세스의 스레드들은 실행에 필요한 최소한의 정보만을 유지한 채 프로세스 자원을 공유하여 실행된다. 프로세스의 자원을 공유한다는 것이 스레드의 핵심이다.

스레드라는 개념이 도입되면서 하나의 프로세스가 한 번에 여러 일을 동시에 처리할 수 있게 되었다. 이런 점에서 스레드는 '프로세스를 구성하는 실행 단위'라고 볼 수 있다. 최근 많은 운영체제는 CPU에 처리할 작업을 전달할 때 프로세스가 아닌 스레드 단위로 전달한다.

프로세스끼리는 기본적으로 자원을 공유하지 않지만, 스레드끼리는 같은 프로세스의 자원을 공유한다는 점이 위의 두 개념의 다른 점이다. 동일한 프로세스 두 개를 동시에 실행하면 프로세스 내의 모든 자원이 복제되어 메모리에 적재된다. 같은 프로세스가 통째로 메모리에 적재 되는 것이기 때문에 갯수가 늘어나게 되면 메모리를 낭비한다고 볼 수 있다. 이에 반해 스레드들은 같은 프로세스 내의 동일한 주소 공간의 코드, 데이터, 힙 영역을 공유하고, 열린 파일과 같은 프로세스 자원을 공유한다. 여러 프로세스를 병행 실행하는 것 보다 메모리를 더 효율적으로 사용할 수 있고, 서로 협력과 통신에 유리하다. 물론 하나의 스레드에 문제가 생기면 프로세스 전체에 문제가 생길 수 있다는 단점이 존재한다.

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

프로세스들마다 우선순위가 다르다. 우선순위가 높은 프로세스는 빨리 처리해야 하는 프로세스를 의미한다. 우선순위가 높은 프로세스에는 대표적으로 입출력작업이 많은 프로세스가 있다.

운영체제는 PCB들이 큐에 삽입된 순서대로 프로세스를 하나씩 꺼내어 실행하되, 그 중 우선순위가 높은 프로세스를 먼저 실행한다.

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

준비된 큐에 삽입된 순서대로 프로세스들을 처리하는 방식 CPU를 오래 사용하는 프로세스가 먼저 도착하면 다른 프로세스는 그 프로세스가 CPU를 사용하는 동안 무작정 기다려야 하는데 이러한 현상을
CPU를 먼저 요청한 프로세스부터 CPU를 할당하는 스케줄링 방식
호위 효과 라고 한다.

준비 큐에 삽입된 프로세스들 중 CPU 이용 시간의 길이가 가장 짧은 프로세스부터 실행하는 스케줄링 방식

FCFS에 각 프로세스가 CPU를 사용할 수 있는 정해진 시간을 의미하는 타임 슬라이스라는 개념이 더해진 스케줄링 방식
정해진 타임 슬라이스만큼의 시간동안 돌아가며 CPU를 이용하는 스케줄링
타임슬라이스의 크기를 잘 정해주는 것이 중요하다.

SJF와 RR이 합쳐진 방식
프로세스들은 정해진 타임 슬라이스만큼 CPU를 사용하되, CPU를 사용할 다음 프로세스로는 남아있는 작업 시간이 가장 적은 프로세스가 선택된다.

프로세스들에 우선순위를 부여하고, 가장 높은 우선순위를 가진 프로세스부터 실행 우선순위가 낮은 프로세스는 우선순위가 높은 프로세스들에 의해 실행이 계속해서 연기될 수 있다(위의 현상을 방지하기 위한 대표적인 기법으로
기아 현상).
에이징 이 있다. 이는 오랫동안 대기한 프로세스의 우선순위를 점차 높이는 방식이다.

우선순위별로 준비 큐를 여러 개 사용하는 스케줄링 방식
우선순위가 가장 높은 큐에 있는 프로세스들을 먼저 처리하고, 우선순위가 가장 높은 큐가 비어있으면 그 다음 우선순위 큐에 있는 프로세스를 처리한다.
큐 별로 타임 슬라이스를 여러 개 지정할 수도 있고, 큐마다 다른 스케줄링 알고리즘을 사용할 수도 있다.

다단계 큐 스케줄링의 발전된 형태로 다단계 큐 스케줄링에서는 프로세스들이 큐 사이를 이동할 수 없었다면 해당 알고리즘에서는 너무 오래 기다리고 있는 프로세스가 있다면 점차 우선순위가 높은 큐로 이동시킬 수 있다.

304p. 확인문제 1번
준비 큐에 A, B, C, D 순으로 삽입되었다고 가정했을 때, 선입 선처리 스케줄링 알고리즘을 적용하면 어떤 프로세스 순서대로 CPU를 할당받는지 풀어보기
선입 선처리 스케줄링 알고리즘은 말 그대로 준비 큐에 삽입된 순서대로 프로세스를 처리하는 방식이기 때문에 들어온 순서 그대로 A, B, C, D 순서대로 CPU를 할당받는다.

# data[].attributes.attachment_link.description
저번주에 시험치고 너무 힘들어서 냅다 쉬어버렸더니.. 늦어버렸지만 그래두 열심히 공부하고 정리해서 올려봅니당! Chapter 09 운영체제 시작하기09-1 운영체제를 알아야 하는 이유개발자들이 운영체제를 알아야 하는 이유! 1. 운영체제란실행할 프로그램에 필요한 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램을 운영체제라고 한다.운영체제는 인터넷 브라우저, 게임과 같은 프로그램이기 때문에 메모리에 적재되어야 한다.

# data[].attributes.body
화이팅

# data[].attributes.attachment_link.title
곽소청바지 : 네이버 블로그

# data[].attributes.body
새로운 곳 구경도 할 겸 재업합니당

# data[].attributes.attachment_link.readable_text
✏️ 4주차 진도: Chapter 09 ~ 11

기본 숙제(필수): p. 304의 확인 문제 1번 풀고 인증하기

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

Chapter 09 운영체제 시작하기

하드웨어를 조작하고 관리하는 기능을 대신 해주는 운영체제를 잘 알아야 오류가 났을 때 오류 메시지를 잘 이해할 수 있고 프로그램을 효율적으로 관리할 수 있다!

운영체제(Operating System)

실행할 프로그램에 시스템 자원을 적절히 할당하고, 프로그램이 올바르게 실행되도록 돕는 프로그램
메모리는 커널 영역과 사용자 영역으로 나뉘는데, 운영체제는 항상 커널 영역에 적재되어 실행된다.(커널이 있는 영역이라 커널 영역) 사용자 영역에는 주로 응용 프로그램이 적재된다.

커널(kernel)

운영체제의 핵심 서비스를 담당하는 부분
어떤 커널을 사용하는지에 따라 컴퓨터 전체의 성능도 달라질 수 있다.

사용자 인터페이스

운영체제가 제공하는 서비스 중 커널에 포함되지 않는 서비스 중 하나
윈도우 바탕화면처럼 사용자가 컴퓨터와 상호작용할 수 있는 통로! 그 종류에는 GUI와 CLI가 있다.

이중 모드

응용 프로그램은 직접 자원에 접근할 수 없고, 오직 운영체제를 통해서만 접근이 가능하다. CPU는 명령어를 사용자 모드와 커널 모드로 나누어서 이러한 작업을 실행한다.(플래그 레지스터의 슈퍼바이저 플래그를 통해 이를 구분한다.)

추가) 하이퍼 바이저 모드
가상 머신 상에서 작동하는 응용 프로그램은 하이퍼바이저 모드로 전환함으로써 가상 머신에 설치된 운영체제로부터 운영체제 서비스를 받을 수 있다.

시스템 호출

사용자 모드로 실행되는 프로그램이 운영체제를 통해 자원에 접근하려면 운영체제에 요청을 보내 커널 모드로 전환되어야 한다. 이때 이 요청을 시스템 호출(system call) 이라고 한다.

운영체제의 핵심 서비스

프로세스 관리
프로세스(실행 중인 프로그램)들이 적절히 번갈아가면서 실행될 수 있도록 관리

자원 접근 및 할당
프로세스들에게 공정하게 CPU 할당, 새로운 프로세스에게 메모리 할당, 메모리 부족할 경우 해결, 입출력 작업 수행

파일 시스템 관리
데이터를 파일과 디렉터리로 관리

Chapter 10 프로세스와 스레드

프로세스

보조 기억 장치에 저장된 프로그램을 메모리에 적재하고 실행하는 순간 해당 프로그램은 프로세스가 된다. -> 프로세스를 생성한다.

프로세스 제어 블록(PCB, Process Control Block)

프로세스와 관련된 정보를 저장하는 자료 구조
프로세스의 실행 순서를 관리하고, 프로세스에 자원을 배분하기 위해 운영체제는 PCB에 적혀 있는 정보들로 프로세스를 식별한다. PCB는 프로세스 생성 시에 커널 영역에 생성되고, 실행이 끝나면 폐기된다.

PCB에 담겨 있는 정보들

프로세스 ID (PID)
프로세스를 식별하기 위해 부여하는 고유한 번호. PID는 프로그램을 실행할 때마다 달라진다.

레지스터 값
이전까지 진행했던 작업들을 그대로 이어 실행하기 위해 이전에 사용했던 레지스터 값을 저장해놓는다.

프로세스 상태
CPU 이용 중인지, 대기 중인지 등등

메모리 관리 정보
프로세스가 어느 주소에 저장되어 있는지에 대한 정보(베이스 레지스터, 한계 레지스터, 페이지 테이블 정보)

사용한 파일과 입출력장치 목록

문맥 교환(context switching)

기존 프로세스의 context를 PCB에 백업하고 새로운 프로세스를 실행하기 위해 문맥을 PCB로부터 복구해서 새로운 프로세스를 시작하는 것

문맥(context)

프로세스 수행을 재개하기 위해 기억해야 할 정보
PCB에 잘 기록되어 있다.

⭐프로세스의 메모리 영역

하나의 프로세스는 사용자 영역에 크게 코드 영역, 데이터 영역, 힙 영역, 스택 영역 으로 나뉘어 저장된다.

정적 할당 영역

동적 할당 영역

힙 영역
프로그래머가 직접 할당할 수 있는 저장 공간.
메모리의 낮은 주소에서 높은 주소로 할당된다.(아래에서 위로 자란다)
힙 영역에 메모리 공간을 할당했다면 언젠가는 해당 공간을 반환해야 한다. 그러지 않으면 메모리 낭비(메모리 누수)

C 에서 동적 배열을 만들 때, 마지막에 해제를 해야 하는 이유!

스택 영역
데이터를 일시적으로 저장하는 공간 (매개 변수, 지역 변수)
메모리의 높은 주소에서 낮은 주소로 할당된다.(위에서 아래로 자라난다.)

프로세스 상태

생성 상태: 프로세스를 생성 중인 상태

준비 상태: CPU 할당을 기다리고 있는 상태

실행 상태: CPU를 할당받아 실행하고 있는 상태

대기 상태: 입출력장치의 작업을 기다리는 상태

종료 상태: 프로세스가 종료된 상태

프로세스 계층 구조

프로세스는 실행 도중 시스템 호출을 통해 다른 프로세스를 생성할 수 있다.
새 프로세스를 생성한 프로세스 -> 부모 프로세스
부모 프로세스에 의해 생성된 프로세스 -> 자식 프로세스

부모 프로세스와 자식 프로세스들을 트리 구조로 나열한 것을 프로세스 계층 구조 라고 한다.

프로세스 생성 기법

fork

부모 프로세스가 자신의 복사본을 자식 프로세스로 생성해내는 시스템 호출(상속)

exec

복사된 자신 프로세스가 자신의 메모리 공간을 다른 프로그램으로 교체하는 시스템 호출

스레드

프로세스를 구성하는 실행의 흐름 단위
한 프로세스의 스레드들은 프로세스의 자원을 공유한다.
최근 많은 OS는 CPU에 처리할 작업을 전달할 때 스레드 단위로 전달한다.(단, 리눅스는 프로세스와 스레드를 통일하여 task라는 이름으로 사용한다.)

단일 스레드 프로세스

한 번에 하나의 명령어만 처리하는 프로세스

멀티 프로세스

여러 프로세스를 동시에 실행하는 것
단일 스레드 프로세스를 여러 개 동시에 실행

멀티 스레드

여러 스레드로 하나의 프로세스를 동시에 실행하는 것

Chapter 11 CPU 스케줄링

프로세스의 우선 순위에 따라 CPU 자원을 할당하는 방법

스케줄링 큐

자원을 사용하고 싶어하는 프로세스들을 줄 세우는 곳. 꼭 선입선출이 아닐 수도 있다!

준비 큐: CPU를 이용하고 싶은 프로세스를 관리

대기 큐: 입출력장치를 이용하고 싶은 프로세스를 관리

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

선점형 스케줄링(preemptive scheduling)

프로세스가 이미 자원을 사용하고 있는 중이어도,그 자원을 빼앗아 다른 프로세스에게 할당할 수 있는 스케줄링
프로세스들에게 골고루 자원을 분배할 수 있지만, context switching에서 오버헤드가 발생할 수 있다.

비선점형 스케줄링(non-preemptive scheduling)

프로세스가 이미 자원을 사용하고 있는 중이라면, 그 자원을 중간에 빼앗아 다른 프로세스에게 할당할 수 없는 스케줄링
context switching에서 발생하는 오버헤드가 적지만, 프로세스들에게 골고루 자원을 분배하기 어렵다.

CPU 스케줄링 알고리즘

FCFS 스케줄링(First Come First Served Scheduling)

준비 큐에 삼입된 순서대로 CPU를 할당하는 비선점형 스케줄링
convoy effect: CPU를 오래 사용하는 프로세스가 먼저 준비 큐에 도착하여, 다른 프로세스가 CPU를 사용하기 위해 너무 오래 기다려야 하는 현상

SJF 스케줄링(Shortest Job First Scheduling)

준비 큐에 삽입된 프로세스들 중 CPU 이용 시간의 길이가 가장 짧은 프로세스부터 CPU를 할당하는 비선점형 스케줄링

Round Robin Scheduling

FCFS 스케줄링 + 타임 슬라이스(각 프로세스가 PCU를 사용할 수 있는 정해진 시간)

SRT 스케줄링(Shortest Remaining Time Scheduling)

SJF + Round Robin Scheduling
정해진 타임 슬라이스만큼 CPU를 사용하되, CPU를 사용할 다음 프로세스로는 남아있는 작업 시간이 가장 적은 프로세스가 선택된다.

우선순위 스케줄링

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

starvation: 우선 순위가 낮은 프로세스의 실행이 계속 연기되는 현상

aging: 오랜동안 대기한 프로세스의 우선순위를 점차 높이는 방식

다단계 큐 스케줄링

우선순위별로 준비 큐를 여러 개 사용하는 스케줄링 방식.
우선순위가 가장 높은 큐에 있는 프로세스들을 먼저 처리한다.
큐 마다 다른 타임 슬라이스, 다른 스케줄링 알고리즘을 사용할 수 있다.

다단계 피드백 큐 스케줄링

다단계 큐 스케줄링 + 프로세스들이 큐 사이를 이동할 수 있다. CPU를 오래 사용해야 하는 프로세스는 점차 우선순위가 낮은 큐로 이동하게 된다. 또한, 어떤 프로세스가 낮은 우선순위 큐에서 너무 오래 기다린다면 높은 우선순위 큐로 이동시킬 수도 있다.

✏️ 기본 숙제

p. 304의 확인 문제 1번

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

1: 생성 상태, 2: 준비 상태, 3: 실행 상태, 4: 종료 상태, 5: 대기 상태

📖추가 숙제

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

선입 선처리 스케줄링은 준비 큐에 들어오는 순서대로, 앞의 프로세스가 CPU를 모두 사용할 때까지 기다린 다음에 다른 프로세스에게 CPU를 할당한다. 따라서, A,B,C,D 순으로 CPU를 할당받게 된다.

# data[].attributes.attachment_link.title
[혼공컴운 12기] week 4 운영체제 시작하기, 프로세스와 스레드, CPU 스케줄링

# data[].attributes.attachment_link.description
✏️ 4주차 진도: Chapter 09 ~ 11 기본 숙제(필수): p. 304의 확인 문제 1번 풀고 인증하기 추가 숙제(선택): Ch.11(11-2) 준비 큐에 A,B,C,D 순으로 삽입되었다고 가정했을 때, 선입 선처리 스케줄링 알고리즘을 적용하면 어떤 프로세스

# data[].attributes.headline
[혼공컴운] 4주차_강성훈

# data[].attributes.subject
[혼공컴운] 4주차_강성훈

# data[].attributes.body
페북에도 올렸는데 혹시 몰라서 여기도 올려놓을게요.

https://lazymatlab.tistory.com/271

https://lazymatlab.tistory.com/272

https://lazymatlab.tistory.com/273

# data[].attributes.attachment_link.readable_text
https://www.almabetter.com/bytes/articles/list-of-operating-system

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

사람의 뇌는 단순히 하드웨어가 아니다.

뉴런들이 전기 신호를 통해 정보를 주고 받는 복잡한 기계이다!

전기 신호를 어떤 기준으로 발생시키고, 어떻게 해석할 것인가?

해석한 결과를 어떻게 이용할 것인가?

이 모든 것에 필요한 것을 우리는 '지적 능력' 또는 '지능'이라고 부른다.

컴퓨터의 부품은 하드웨어이다.

이것들이 잘 돌아가도록 정보의 흐름을 관장할 지능이 필요하다.

그것을 우리는 '운영체제'라고 부른다.

이름이 기니까 앞으로는 OS라고 부르겠다.

OS의 역할: 프로그램 실행에 필요한 자원을 할당하고, 프로그램이 제대로 실행되도록 돕는다!

출처: https://people.kernel.org/linusw/how-the-arm32-kernel-starts

OS가 하는 일들

각 프로그램(프로세스)이 메모리 어디에 올라갈지를 정해준다. (메모리 할당)

당연히 메모리가 겹치지 않게 잘 관리해야 한다.

두 프로그램이 하나의 하드웨어를 동시에 사용할 수 없으므로, 누가 먼저 쓰게 할지 정해준다. (자원 할당)

그래서 OS를 왜 알아야 하는가?

컴퓨터 사용, 프로그램 사용, 코딩, 이 모든 것들은 결국,

컴퓨터라는 기계와 대화하는 행위이다.

그런데 이 기계는 OS라는 지능을 갖고 있다.

기계와 대화하고 싶다면? 기계를 더 잘 이해하고, 더 잘 쓰고 싶다면?

기계의 지능인 OS를 알아야 한다.

9.2 운영체제의 큰 그림

OS의 가장 중요한 역할은 소프트웨어와 하드웨어 간의 중개이다.

각 소프트웨어(프로그램)에게 필요한 하드웨어(자원)을 할당해주어야 한다.

시간 및 공간적으로 겹치지 않는지, 누구에게 무엇을 먼저 줄 것인지도 정해야 한다.

OS는 바쁘다!

OS에서 핵심 기능을 담당하는 부분을 커널이라고 부른다.

OS에서 커널을 뺀 나머지는 사용자와의 상호작용을 위한 것이므로, 커널만 이해해도 충분하다.

살다 보면 간혹 아무 생각 없이 무언가를 할 때가 있다.

그럴 때 우리는 '무지성'이라는 단어를 쓴다.

출처: https://quasarzone.com/bbs/qb_free/views/6567132

사용자, 또는 사용자가 실행하는 프로그램은 하드웨어 자원에 함부로 접근하면 안 된다.

총괄 매니저가 필요하다. OS가 그 역할을 한다.

프로그램은 필요한 자원을 OS에게 요청한다.

그리고 OS는 한 번에 하나의 요청만 처리한다.

그래서 OS가 일하는 모드, 프로그램이 일하는 모드가 분리되어 돌아간다.

이것을 이중 모드(dual mode)라고 부른다.

OS가 일하는 모드를 커널 모드(kernel mode)라고 부른다.

프로그램이 실행되는 모드를 사용자 모드(user mode)라고 부른다.

출처: https://cstaleem.com/user-mode-vs-kernel-mode-trap-vs-interrupt

프로그램은 OS에게 필요한 것을 요청한다. 이것을 시스템 호출(system call)이라고 부른다.
시스템 호출도 일종의 인터럽트이다. 소프트웨어적으로 발생하므로 소프트웨어 인터럽트라고 부른다.

호출을 받은 OS는 원래 하던 작업을 백업하고 커널 모드로 들어가서 필요한 작업을 한다.

작업을 마치면 시스템 호출 복귀를 보낸다.

사용자 모드가 되어 프로그램이 돌아간다.

그래서 OS가 돌아가는 동안에는 커널 모드와 사용자 모드가 계속 스위칭된다.

9.2.1 운영체제의 핵심 서비스

OS가 제공하는 핵심 서비스를 하나씩 알아보자.

출처: https://www.geeksforgeeks.org/introduction-of-process-management/

자원 접근 및 할당

프로세스는 일을 하려면 자원(하드웨어)이 필요하다.

프로세스가 자원 필요하다고 탕비실 과자 집어가듯이 막 가져가면 안 된다.

그러면 OS한테 혼난다.

프로세스는 여러 개가 메모리에 올라가 있을 수 있지만, CPU는 한 번에 한가지만 실행한다.

그래서 어느 프로세스를 먼저 CPU에게 시킬지 정해야 한다.

출처: https://www.krivalar.com/OS-resource-allocation-graph

프로세스가 메모리에 올라갈 때에도 어디에 올릴지를 OS가 정한다.

인터럽트가 발생했을 때 돌아가는 인터럽트 서비스 루틴은 OS의 커널에 들어있다.

입출력장치가 발생시키는 인터럽트도 마찬가지로, OS가 받아서 CPU의 작업 순서를 조절한다.

파일 시스템 관리

당연한 얘기지만, 파일이 들어있는 폴더도 관리한다.

이것을 파일 시스템이라고 부른다.

파일 시스템 관리도 OS의 몫이다.

# data[].attributes.attachment_link.title
[혼공컴운] 9장. 운영체제 시작하기

# data[].attributes.attachment_link.description
9. 운영체제 시작하기지금까지 알아본 것들은 모두 하드웨어였다.CPU는 ALU, 제어장치, 레지스터, 캐시로 구성된다.그 외에 메모리, 보조기억장치, 입출력장치들이 있다.이것들이 주고받는 정보에 대해서도 알아봤다.하지만 전기를 넣는다고 알아서 정보를 주고받지 않는다.사람이 사무실에 앉아 있다고 해서 일을 하는 것은 아니듯이 말이다.그럼 뭣이 필요한가?지능이 필요하다!9.1 운영체제를 알아야 하는 이유사람의 뇌는 단순히 하드웨어가 아니다.뉴런들이 전기 신호를 통해 정보를 주고 받는 복잡한 기계이다!전기 신호를 어떤 기준으로 발생시키고, 어떻게 해석할 것인가?해석한 결과를 어떻게 이용할 것인가?이 모든 것에 필요한 것을 우리는 '지적 능력' 또는 '지능'이라고 부른다.컴퓨터의 부품은 하드웨어이다.이것들이 잘..

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

# data[].attributes.body
혼공데분이라고 항상 말머리를 달았는데 혼공분석이었군요(....) 4주차만에 알아버린...ㅋㅋㅋㅋ 이미 메일로 과제 제출 했지만, 블로그 새단장한 기념으로(?) 다시 과제 제출합니다 ㅎㅎ 족장님 화이팅이에요!

# data[].attributes.body
4주차 공부 제출합니다.

모두 즐거운 방학 보내세요~

# data[].attributes.attachment_link.description
주간진도기본 숙제(필수)추가 숙제(선택)4주차(7/22~7/28)Ch.07함수의 유형 정리하기.p.226 7-5번 풀어보기. 유튜브 강의: 혼자 공부하는 C언어 혼자 공부하는 C 언어[혼자 공부하는 C 언어]는 [이것이 C언어다]의 전면 개정판으로, 두 책의 독자 모두 이 강의를 참고하여 학습하실 수 있습니다.

# 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
뭔가 낯선 느낌.... 두근 두근... 지각 제출이라서 그런가? ^^

# data[].attributes.attachment_link.description
가족 여행 및 대학원 MT로 인해... 엄청난 지각 공부를 한다.미리 하지 못했음에 대해 반성 !!!! 무릎 꿇고 반성 !!! 05-1 결정 트리 (Decision Tree)- 로지스틱 회귀 (Logistic Regression)- 결정 트리 (Decision Tree Classifier), 가지 치기(Prunning) 05-2 교차 검증과 그리드 서치- 검증 세트 (validation)- 교차 검증 (Cross Validation) . 분할기(Splitter)를 사용한 교차 검증 : StratifiedKFold- 하이퍼파라미터 튜닝 (Hyperparameter Optimization) . 그리드 서치 (GridSearchCV) . 확률 분포 선택 : uniform, randint . 랜덤 서치…

# data[].attributes.body
헤헤 지각했지만 4주차 제출합니다!

# data[].attributes.attachment_link.readable_text
전송 계층 : IP의 한계를 보완

네트워크 계층과 응용 계층 사이에 위치

연결형 통신이 가능한 프로토콜을 제공하여 네트워크 계층의 한계 보완 : 신뢰성/연결성 확립

네트워크 계층의 IP 특징 : 최선형 전달
(최선을 다해 보겠지만, 전송 결과에 대해서는 어떠한 보장은 하지않겠다)

비신뢰성 프로토콜(신뢰할 수 없는 통신) : 패킷이 수신까지 제대로 전송되었다는 보장을 하지 않는 통신 특성

비연결형 프로토콜 : 송수신 호스트 간에 사전 연결 수립 작업을 거치지 않는 통신 특성
호스트 간에 연결을 수립하는 작업은 패킷의 빠른 송수신과 배치되는 작업

포트를 통해 응용 계층의 어플리케이션 프로세스 식별함으로써 응용 계층과의 연결 다리 역할 수행

포트 : 응용계층과의 연결 다리

서버와 클라이언트

서버 (HTTP 서버)

일반적으로 잘 알려진 포트와 등록된 포트로 동작

클라이언트

일반적으로 동적 포트로 동작

예시) 브라우저 : 웹 브라우저를 통해 특정 웹사이트에 접속하는 상황

포트 기반 NAT

NAT

공인 IP주소와 사설 IP 주소 간의 변환하는 기술

하나의 공인 IP 주소를 여러 사설 IP 주소가 공유 가능 (포트 활용)

IP 주소 부족 문제 해결

NAT 테이블에서는 변환의 대상이 되는 IP 주소가 일대일로 대응되어 있다.

NAPT (Network Address Port Translate)

포트를 활용해 하나의 공인 IP주소를 여러 사설 IP 주소가 공유
IP 주소가 같더라도 포트 번호가 다르면 네트워크 내부의 호스트를 특정할 수 있기 때문

NAT 테이블에 변환될 IP주소 쌍과 더불어 포트 번호도 함께 기록하고 변환

공인 IP 주소 수 부족 문제 개선

NAT

NAPT

포트 포워딩 (Port Fowarding)

네트워크 내 특정 호스트에 IP 주소와 포트 번호를 미리 할당하고, 해당 IP 주소:포트 번호로써 해당 호스트에게 패킷을 전달하는 기능

처음 패킷을 보내는 네트워크 외부 호스트 입장에서는 어떤 IP 주소(및 포트)를 수신지 주소로 삼을지 결정하기 어려울 수 있다.

예시) 하나의 EC2 인스턴스에서 백엔드(80)와 프론트엔드(3000)가 각각의 다른 포트에서 서버가 구동될 때, 사용자가 해당 IP 주소 진입시에 프론트엔드 포트로 포트포워딩 시켜준다. 즉, 기본 포트를 프론트엔드 포트로 설정하고 해당 포트로 리다이렉팅 시켜준다.
상세 설명

포트 포워딩:
네트워크 라우터나 서버에서 외부에서 들어오는 트래픽을 특정 내부 서버의 프론트엔드 포트로 전달합니다. 예를 들어, 외부에서 80번 포트로 들어오는 요청을 내부 서버의 3000번 포트(프론트엔드 포트)로 포트 포워딩합니다.

리다이렉트 설정:
내부 서버의 프론트엔드 포트(예: 3000번 포트)에서 실행 중인 웹 애플리케이션이 사용자의 요청을 처리할 때, URL에 포트 번호가 포함되지 않도록 리다이렉트 설정을 합니다. 예를 들어, http://example.com:3000으로 들어오는 요청을 http://example.com으로 리다이렉트하여 사용자가 포트 번호를 명시하지 않도록 할 수 있습니다.

ICMP

IP 패킷의 전송 과정에 대한 피드백 메시지를 얻기위해 사용하는 프로토콜

IP의 비신뢰성과 비연결성을 보완하기 위한 네트워크 계층의 프로토콜
보완하는 도우미일뿐, 신뢰성을 완전히 보장하기 위해서는 전송 계층의 프로토콜 필요

종류

전송 과정에서 발생한 문제 상황에 대한 오류 보고

네트워크에 대한 진단 정보(네트워크상의 정보 제공)

하나 하나 확실히 보냄

통신(데이터 송수신)하기 전에 연결을 수립하고 통신이 끝나면 연결을 종료

MSS (Maximum Segment Size)

TCP 세그먼트로 보낼 수 있는 최대 페이로드 크기 (전송 가능한 최대 페이로드 크기)

MSS 크기 고려시에 TCP 헤더는 제외

TCP 세그먼트 구조

송신지 포트 (source port) / 수신지 포트 (destination port)
송신지 / 수신지 애플리케이션을 식별하는 포트 번호가 명시

순서 번호 / 확인 응답 번호

TCP 신뢰성을 보장하기 위해 사용되는 필드

순서 번호 (sequence number; 시퀀스 넘버)
송수신되는 세그먼트의 올바른 순서를 보장하기 위해 TCP 세그먼트 데이터 첫 바이트에 부여되는 번호

1. 처음 연결 수립 : 초기 순서번호

2. 연결 수립이후 : 초기 순서 번호 + 송신한 바이트 수 (== 초기 순서 번호 + 떨어진 바이트수)

확인 응답 번호 (acknowledgment number; ACK 넘버)

상대 호스트가 보낸 세그먼트에 대한 응답

수신호스트가 다음으로 수신받기 기대하는 순서 번호

일반적으로 '수신한 순서 번호 + 1'로 설정됨

연결형 프로토콜 ; TCP 연결 수립과 종료

TCP는 쓰리 웨이 핸드셰이크로 연결 수립

1. 연결 설정 (서버 - 클라이언트)

1. 액티브 오픈 : 처음 연결을 시작하는 호스트 연결 수립 과정 (클라이언트)

2. 패시브 오픈 : 연결 요청을 받고 나서 요청에 따라 연결 수립 (서버)

2. 데이터 송수신

3. 연결 종료

1. 액티브 클로즈 : 먼저 연결 종료

2. 패시브 클로즈 : 연결 종료 요청을 받아들이는 호스트

TCP 상태

스테이트풀 (stateful) 프로토콜 : TCP는 상태를 유지하고 활용하기 때문

현재 연결 상태를 나타내기 위해 다양한 상태(state) 활용

연결 수립되지 않은 상태

CLOSED : 아무런 연결이 없는 상태

LISTEN : 연결 대기 상태, SYN 세그먼트를 기다리는 상태(서버 호스트) : SYN세그먼트를 받으면 쓰리 웨이 핸드세이크 시작

연결 수립 도중 사용되는 상태

SYN-SENT : SYN 세그먼트로 보낸 뒤 응답인 SYN+ACK 세그먼트 대기

SYN-RECEIVED : 패시브 오픈 호스트가 SYN+ACK 세그먼트를 보낸 뒤 그에 대한 ACK 세그먼트 대기

ESTABLISHED : 연결이 확립되었음을 나타내는 상태

Three-way handshake 끝났을 경우

데이터 송수신 가능

연결 헤제시 사용되는 상태 : FIN-WAIT-1, FIN-WAIT-2, CLOSE-WAIT, LAST-ACK, TIME-WAIT
엑티브 클로즈 호스트는 마지막 ACK을 보낸뒤 TIME-WAIT 상태에서 일정 시간을 기다리고 연결 종료
상대 호스트가 받았어야 할 마지막 ACK 세그먼트가 올바르게 전송되지 않았을 수 있기 때문

마지막 ACK 세그먼트의 유실 대비

또 다른 연결 과정에서의 패킷 혼선 방지

CLOSING : 상대 FIN 세그 먼트에 ACK세그먼트를 보냈지만, 자신의 FIN 세그먼트에 대한 ACK 세그먼트를 받지 못한 상태

UDP (User Datagram Protocol)
빠르게 마구 던지기 때문에 그 과정에서 패킷이 손실되거나 순서가 바뀔 수도 있다.

IP 패킷을 감싸는 껍데기일 뿐

비연결성/비신뢰성 프로토콜
상태를 유지와 활용도 하지않기때문에 스테이트리스 프로토콜의 일종

TCP의 재전송/흐름 제어/혼잡 제어 등의 기능이 없음

최근 빠른 성능으로 각광받음
HTTP/3, NTP, RIP, DNS, DHCP

UTP 데이터 그램 : 송신지 포트와 수신지 포트 , UDP 길이, 체크섬 필드 존재

신뢰성 프로토콜 TCP

오류 제어 : 재전송 기능

무엇인가를 확실히 전송했다는 보장

1. 송신 호스트가 송신한 세그먼트에 문제가 발생했음을 인지할 수 있어야한다.

2. 오류를 감지하게 되면 해당 세그먼트를 재전송할 수 있어야한다.

TCP가 어떤 상황에서 송신한 세그먼트에 문제 있음을 감지하는가.

1. 중복된 ACK 세그먼트를 수신했을 때; 일부 누락시 반복해서 전송

2. 타임아웃이 발생했을 때; TCP 세그먼트를 송신하는 호스트는 모두 재전송 타이머 값 유지, 전송할 때마다 재전송 타이머 시작하며 이 타이머의 카운트 다운이 끝난 상황

흐름 제어 : 받을 수 있는 만큼만 받기

수신자의 처리 속도를 고려하여 전송하는 방식

TCP는 슬라이딩 윈도우 사용

혼잡 제어 : 보낼 수 있는 상황에서만 보내기

네트워크 혼잡도를 판단하고 혼잡한 정도에 따라 전송량을 조절하는 방식

느린시작, 혼잡 회피, 빠른 회복 등의 알고리즘 사용 가능

RTT(Round Trip Time)

송신 호스트가 세그먼트를 전송한뒤 그에 대한 답변을 받는 데까지 걸리는 시간

ARQ(Automatic Repeat Request: 자동 재전송 요구) 재전송 기반의 오류 제어 : 잘못 전송된 경우 재전송하는 기법

TCP는 재전송 기반의 오류 제어를 수행

수신 호스트의 답변(ACK)과 타임아웃 발생을 토대로 문제 진단 및 문제가 생긴 메시지 재전송함으로써 신뢰성 확보; 재전송을 기반으로 잘못된 전송을 바로잡는 것

Stop-and-Wait ARQ

Go-Back-N ARQ

Selective Repeat ARQ

1. Stop-and-Wait ARQ

가장 단순한 형태

제대로 보냈음을 확인하기 전까지는 보내지 않음

전송 → 확인 → 전송 → 확인...

문제점 : 한 번의 전송에 그에 맞는 확인이 필요하기 때문에, 네트워크 이용 효율이 낮음

해결 방안 : 여러 세그먼트를 한 번에 전송(==파이프라이닝)필요

2. Go-Back-N ARQ

Stop-and-Wait ARQ의 문제를 해결 : 각 세그먼트가 도착하기 전이라도 여러 세그먼트를 전송(파이프라이닝)

올바른 세그먼트에 대해서는 확인 응답 보냄

문제점 : 올바르지 않은 세그먼트(e.g. N번 세그먼트)가 수신되면 이후(N+1번 이후) 모든 세그먼트 폐기
ACK 세그먼트를 수신받지 못한 n+2번 세그먼트부터 다시 전송

누적 확인 응답 (Cumulative ACK) : 'n번까지의'확인 응답

빠른 재전송 (fast retransmit)

없는 경우 : 재전송 타이머가 만료되어야 비로소 재전송

있는 경우 : 재전송 타이머가 만료되지 않아도 중복 세그먼트가 수신되면 재전송

3. Selective Repeat ARQ

Go-Back-N ARQ의 문제를 해결 : 올바르게 수신받지 못한 ACK 세그먼트가 있을 경우 해당 세그먼트만 재전송

올바른 세그먼트에 대해서만 확인 응답 보냄

각 세그먼트에 대한 확인 응답 : 개별 확인 응답

Selective Repeat ARQ 지원여부는 TCP 세그먼트 헤더의 옵션 필드에 속한 SACK(selective acknowledgment)필드를 통해 알수 있다.

두 호스트가 연결 수립할 때 Selective Repeat ARQ를 사용하지 않을 경우 Go-Back-N ARQ방식으로 동작하게 된다.

흐름 제어 : 슬라이딩 윈도우

호스트가 한 번에 받아서 처리할 수 있는 세그먼트의 양에는 한계가 있기 때문에 흐름 제어를 고려해야한다.

송신 버퍼와 수신버퍼

송신 버퍼 : 어플리케이션 계층에서 전송할 데이터 임시 저장되는 공간

수신 버퍼 : 수신된 세그먼트가 애플리케이션 프로세스에 의해 읽히기 전에 임시로 저장되는 공간

송신 호스트가 수신 호스트가 처리할 수 있는 버퍼보다 더 많은 데이터를 전송하면?
버퍼 오버플로우 : 일부 데이터가 처리되지 않을 수 있다.

파이프라이닝 기반(Go-Back-N ARQ, Selective Repeat ARQ)에서 흐름 제어 필요

송신 호스트가 수신 호스트 처리 속도를 고려하며 송수신 속도를 균일하게 맞추는 것

슬라이딩 윈도우 (sliding window) 사용

윈도우 : 송신 호스트가 파이프라이닝 가능한 순서번호 범위

윈도우 크기 : 확인 응답 받지 않고도 한번에 보낼 수 있는 최대량

흐름 제어의 주체 : 수신 호스트
(수신) 윈도우 크기 : TCP 헤더를 통해 송신지에게 알려주는 정보
송신측 윈도우는 TCP 헤더 윈도우 필드를 통해 수신 호스트가 알려주는 수신 측 윈도우를 토대로 알 수 있는 정보다.

수신 호스트
수신 윈도우 = 수신 버퍼 크기 - (마지막으로 수신한 바이트 - 마지막으로 읽어들인 바이트)

송신 호스트
수신 윈도우 ≥ 마지막으로 송신한 바이트 - 마지막으로 수신 확인된 바이트

혼잡 제어

혼잡(congestion) : 많은 트래픽으로 인해 패킷 처리 속도가 느려지거나 유실될 우려가 있는 상황

만약, 혼잡 제어가 이루어지지 않는 다면? ⇒ 혼잡→ 유실 → 재전송 → 혼잡 → 유실 → 재전송 → ...

혼잡 제어의 주체 : 송신 호스트

어느 정도의 세그먼트를 전송해야할 지를 직접 계산하여 알아내야 한다.

최소값(수신 윈도우, 혼잡 윈도우) ≥ 마지막으로 송신한 바이트 - 마지막으로 수신 확인된 바이트

혼잡이 생기지 않을 정도로만 조금씩 전송하는 방법

혼잡 윈도우 : 혼잡 없이 전송할 수 있을 법한 양

혼잡 제어 알고리즘의 기본 동작 형태 :
AIMD (Additive Increade Multicative Decrease) : 합으로 증가, 곱으로 감소

혼잡 미감지 : 혼잡 윈도우를 RTT 마다 1씩 선형적으로 증가

혼잡 감지 : 혼잡 윈도우를 절반으로 떨어뜨리는 것을 반복

TCP 혼잡 제어 알고리즘

혼잡 제어를 수행하는 알고리즘

혼잡제어

타임아웃 발생 : 혼잡 윈도우 값을 1, 혼잡이 감지되었을 시점의 혼잡 윈도우값을 절반으로 초기화 한후 느린 시작 재개

혼잡 윈도우(CWND) ≥ 느린 시작 임계치(SSTHRESH) : 느린 시작 종료, 혼잡 윈도우를 절반으로 초기화한 뒤 혼잡 회피 수행

세 번의 중복 ACK 발생 : (빠른 재전송 후) 빠른 회복 수행

1. 느린 시작
ACK 세그먼트가 수신될 떄마다 혼잡 윈도우 1 증가 (RTT마다 혼잡 윈도우 2배 증가)

2. 혼잡 회피

1. 매 RTT마다 혼잡 윈도우 1MSS씩 증가

2. 느린 시작 임계치를 넘어선 시점부터 혼잡 발생 우려로, 조심히 혼잡 윈도우 증가

3. 빠른 회복
1. 세번의 중복 ACK 세그먼트가 수신되었을 때 느린 시작을 건너뛰고 혼잡 회피를 수행하는 알고리즘
2. TCP Tahoe (빠른 회복 미수행) vs TCP Reno (빠른 회복 수행)

ECN : 명시적 혼잡 알림

혼잡을 회피하기 위해 네트워크 중간 장치(주로 라우터)의 도움을 받는 방법
이전에는 송신 호스트가 혼잡 윈도우 계산 및 조정

ECN은 선택적인 기능이기 때문에 통신을 주고받는 양쪽 호스트가 ECN기능을 지원해야 한다.

진도: Chapter 03

기본 숙제(필수): Ch.04(04-1) 확인 문제 1번(p.206), (04-2) 확인 문제 2번(p.225) 풀고 설명하기

추가 숙제(선택): 작업 관리자에서 프로세스별 PID 확인해 보기

기본 숙제

Ch.04(04-1) 확인 문제 1번(p.206)

비신뢰성, 비연결형
IP는 신뢰할 수 없는 비연결형 전송을 수행한다. 전송 계층은 이를 보완하는 프로토콜(TCP)을 제공한다.

Ch.03(04-2) 확인 문제 2번(p.225)

추가 숙제

작업 관리자에서 프로세스별 PID 확인해 보기

회고

아이고 개인사정때문에 너무 늦게 작성했다.
TCP/IP 내용을 겉핥기로 알고 있긴했는데, 이번 시간에 좀 더 자세하게 알게 되었다.
그런데 알게 되기만하고 내 것으로 만들지는 못했던 것 같다. 그래도 네트워크계층보다는 전송 계층이 더 재밌다.

# data[].attributes.attachment_link.title
[혼공네트] 4주차_전송 계층

# data[].attributes.attachment_link.description
전송 계층 : 포트, TCP/IP (오류 제어, 흐름 제어, 혼잡 제어) , UDP

# data[].attributes.body
부끄럽지만 방학이 코앞이라고 생각하니, 쉬고 싶고 놀고 싶다는 유혹에 무너지고 말았습니다.

4주차를 완료한다는 의의로 올리는데..

혼공족장님의 휴가를 방해하게 되어서 정말 송구하고 죄송합니다.

무엇보다도 제출할 곳을 발 빠르게 만들어주셔서 감사드립니다!

# data[].attributes.attachment_link.readable_text
4주차

Chapter 09 ~ 11

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

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

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

운영체제가 하는 일

1. 프로그램에 필요한 자원을 할당한다.

2. 프로그램이 올바르게 실행되도록 돕는다.

각 응용프로그램의 메모리 주소가 겹치지 않도록 적당한 공간에 프로그램 적재.

최대한 공정하게 CPU 자원 할당

더 이상 실행되지 않는 프로그램을 메모리에 삭제하며 지속적으로 메모리 자원 관리

메모리

커널 영역: 운영체제는 매우 특별한 프로그램. 항상 컴퓨터가 부팅될 때 따로 적재되어 실행된다.

시스템 영역: 커널 영역을 제외한 나머지 영역, 사용자가 이용하는 응용 프로그램이 적재되어 있는 영역.

알아야 하는 이유

운영체제와의 대화를 통해 하드웨어와 프로그램을 더 깊이 이해하고 문제 해결의 실마리.

9-2 운영체제의 큰 그림

커널

이중 모드 (dual mode)

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

사용자 모드(user mode)

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

커널 영역의 코드를 실행할 수 없는 모드

일반적인 응용 프로그램

커널 모드(kernel mode)

운영체제 서비스를 제공받을 수 있는 실행 모드

커널 영역의 코드를 실행할 수 있는 모드

운영체제

시스템 호출(system call): P280 좀 더 알아보기

운영체제 서비스를 제공받기 위해 커널 모드로 전환하는 방법

일종의 (소프트웨어적인) 인터럽트.

운영체제의 핵심 서비스

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

새로운 운영체제와 응용 프로그램을 설치, 실행할 수 있다.

가상 머신 또한 응용 프로그램. 사용자 모드로 작동

하이버바이저 모드

10-1 개요

프로세스 직접 확인하기

포그라운드 프로세스(foreground process): 사용자가 보는 앞에서 실행되는 프로세스
1) 윈도우에서는 .. 작업관리자->프로세스

2) 유닉스에서는 ps 명령어

사용자가 보지 못하는 뒤에서 실행되는 프로세스

백그라운드 프로세스(background process): 사용자와 상호작용하지 않고 그저 묵묵히 정해진 일만 수행하는 백그라운드 프로세스
1) 윈도우에서는 서비스

2) 유닉스에서는 데몬(daemon)

프로세스 제어 블록

PCB: Process Control Block

프로세스와 관련된 정보를 저장하는 자료 구조

마치 상품에 달린 태그와 같음

커널 영역에 생성됨

PCB에 담기는 정보

1) 프로세스 ID (PID:Process ID)

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

🤔 책과 다르게 고유 번호가 아닌 프로세스 이름이 나오는 상황.
작업관리자를 뒤적거리니 PID는 [자세히]에서 찾을 수 있다.

2) 레지스터 값
3) 프로세스 상태
4) CPU 스케줄링 정보
5) 메모리 관리 정보
6) 사용한 파일과 입출력장치 목록

문맥 교환(context switching)

기존 프로세스의 문맥을 PCB에 백업하고 새로운 프로세스를 실행하기 위해 문맥을 PCB로부터 복구하여 새로운 프로세스를 실행하는 것

프로세스의 메모리 영역

1) 코드 영역(텍스트 영역)

2) 데이터 영역

프로그램이 실행되는 동한 유지할 데이터가 저장되는 공간

예) 전역변수

정적 할당 영역
3) 힙 영역

프로그래머가 직접 할당할 수 있는 저장 공간

메모리 누수 발생: 프로그래밍 과정에서 힙 영역에 메모리 공간을 할당했다면, 언젠가는 해당 공간을 반환해야 한다. 하지만 반환하지 않는다면 메모리 낭비를 초래한다.

동적 할당 영역(프로세스 실행 과정 중 크기가 변할 수 있는 영역)

메모리가 낮은 주소에서 높은 주소로 할당

4) 스택 영역

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

프로세스 상태

1) 생성 상태(new): 곧바로 실행 x, 준비 상태가 되어 CPU 할당을 기다림
2) 준비 상태(ready): 기다리는 상태

실행 상태로 전환되면 dispatch라고 함.

3) 실행 상태(running): 할당된 일정 시간 동안만 cpu 사용 가능. 할당된 시간을 모두 사용하면(타이머 인터럽트 발생) 다시 준비 상태가 됨. 실행 도중 임출력 장치의 작업이 끝날 때까지 기다려야 한다면 대기 상태가 됨.
4) 대기 상태(blocked): 일반적으로 프로세스 실행 도중 입출력 장치의 작업을 기다리는 상태
5) 종료 상태(terminated): 운영체제는 PCB와 프로세스가 사용한 메모리 정리

프로세스 상태 다이어그램

프로세스 계층 구조

프로세스가 프로세스를 낳는 계층적인 구조(트리 구조)로써 프로세스들을 관리

일부 운영체제에서는 자식 프로세스의 PCB에 부모 프로세스의 PID인 PPID(Parent PID)가 기록되기도 함

프로세스 생성 기법

1) fork

자기 자신 프로세스의 복사본을 자식 프로세스로 생성하는 시스템 호출

복사된 자식 프로세스라 하더라도 PID나 저장된 메모리 위치는 달라짐

2) exec

자신의 메모리 공간을 다른 프로그램으로 덮어 쓰는 시스템 호출

일종의 옷 갈아입기

10-3 스레드
프로세스를 구성하는 실행의 흐름 단위
프로세스와 스레드

프로세스는 '실행의 흐름 단위가 하나'라는 점에서 단일 스레드 프로세스라고 볼 수 있다.

전통적인 관점에서 하나의 프로세스는 한 번의 하나의 일만을 처리했다.

스레드가 등장하면서 하나의 프로세스가 한 번에 여러 일을 동시에 처리할 수 있게 됨.

프로세스와 스레드들은 실행에 필요한 최소한의 정보만을 유지한 채 프로세스 자원을 공유하며 실행한다.
- 프로그램 카운터를 포함한 레지스터, 스택

리눅스 창시자 Linus Torvalds의 '프로세스와 스레드'에 대한 반응

multiproces와 multithread

프로세스 간의 통신

IPC(Inter-Process Communication): 프로세스끼리도 자원을 공유하고 데이터를 주고 받을 수는 있다.

🤔 프로세스, 스레드 실습이 꽤 신기하다.

11-1 개요

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

프로세스 우선순위

프로세스 종류

1) 입출력 집중 프로세스(I/O bound process)

비디오 재생, 디스크 백업 등 입출력 작업이 많은 프로세스

실행 상태보다 입출력을 위한 대기 상태에 더 많이 머무른다.

I/O burst가 많은 프로세스

2) CPU 집중 프로세스(CPU bound process)

복잡한 수학 연산, 컴파일, 그래픽 처리 작업 등 CPU 작업이 많은 프로세스

대기 상태보다 실행 상태에 더 많이 머무른다.

CPU burst가 많은 프로세스

💡일반적으로 입출력 집중 프로세스(완료 전까지 어차피 대기 상태)를 빨리 실행시키고 그 다음으로 CPU 집중 프로세스에 CPU를 집중적으로 할당하는 것이 더 효율적이다.

명령을 통해 일부 프로세스의 우선 순위를 변경할 수 있음

스케쥴링 큐

Scheduling queue: 운영체재가 '줄을 서시오~.'
CPU를 사용하고 싶은 프로세스들, 메모리에 적재되고 싶은 프로세스들, 특정 입출력 장치를 사용하고 싶은 프로세스들을 모두 줄을 세운다.

반드시 선입선출 방식 x

큐의 종류

1. ready queue: CPU를 이용하고 싶은 프로세스들이 서는 줄

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

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

1) 선점형 스케쥴링(preemptive scheduling)

선점: 남보다 앞서서 차지함

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

자원 독점을 막고 골고루 배분 가능

문맥 교환 과정에서 오버헤드가 발생할 수 있음

2) 비선점형 스케줄링(non-preemptive scheduling)

자원을 이용하고 있는 프로세스가 종료 또는 스스로 대기 상태에 들어가기 전까지 다른 프로세스가 끼어들 수 없는 스케줄링

문맥 교환 과정에서 오버헤드가 발생할 경우가 적음

새로운 프로세스가 무작정 기다림

자원 배분 x

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

종류

1) 선입 선처리 스케줄링
2) 최단 작업 우선 스케줄링
3) 라운드 로빈 스케줄링
4) 우선순위 스케줄링
5) 다단계 큐 스케줄링
6) 다단계 피드백 큐 스케줄링

숙제 1: p. 304의 확인 문제 1번 풀고 인증하기

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

A-B-C-D 순으로

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

# data[].attributes.body
페이스북에 올렸다가 패들렛에도 올립니다.남은 방학도 다들 잘 보내세요~

# data[].attributes.body
혼공네트 4주차 숙제입니다~

# data[].attributes.attachment_link.readable_text
4. 네트워크 계층

4-1 전공 계층 개요: IP 의 한계와 포트

신뢰할수 없는 통신과 비연결형 통신

IP의 한계를 보완하는 전송 계층

응용 계층과의 연결 다리, 포트

- 포트의 정의

- 포트의 종류

포트 기반 NAT

- NAT 변한 테이블

- NAPT

포트 포워팅

후기: 네트워크 구성시때 공부해본 내용들이 들어 있으면 홈네트워크 구성시에 구현한 포트포워딩의 자세한 내용을 알수 있었습니다.

4-2 TCP와 UDP

TCP 통신 단계와 세그먼트 구조

- 제어비트

- 순서 번호와 확인 응답번호

TCP 연결 수립과 종료

- 연결 수립 : 쓰리 웨이 핸드셰이크

- 연결 종료

TCP 상태

- 연결이 수립되지 않은 상태

- 연결 수립 상태

- 연결 종료 상태
UDP 데이터 그램 구조

후기: 보안설정이나 클라우드 사용시 TCP UDP 란 무엇인지 기능중심으로 어떤걸 사용해야 하는지만 확인하고 이론적인 부분은 하나도 몰랐는데 알수있었습니다.

4-3 TCP의 오류,흐름,혼잡 제어

오류제어: 재전송기법

- Go-Back-N ARQ

- Selective Repeat ARQ

흐름 제어: 슬라이딩 윈도우

혼잡 제어

후기 : RTT 까지는 오류중 확인을 해본적있었지만 그외 의 내용들은 실무나 사용중인 기기에서는 접하거나 고려해본적 없던 내용이였습니다. 새로운 알고리즘에 대해 알수있었고 이해를 위해 좀더 복습이 필요할것 같습니다.

4주차 숙제

1.신뢰할수 없는 프로토콜, 비연결형 프로토콜

신뢰할수 없는 통신 은 IP프로토콜이 패킷이 수신지까지 제대로 전송되었다는 보장을 하지 않는 특징을 일컫습니다.

비연결형 통신 은 이름 그대로 송수신 호스트 간에 사전 연결 수립 작업을 거치지 않는 특징을 의미합니다. 그저 수신지를 향해 패킷을보내기만 할 뿐입니다.

2. 잘 알려진 포트, 등록된 포트, 동적 포트

잘 알려진 포트 는 영문 그대로 웰 노운 포트라 고 지칭하는 경우가 많으며, 시스템 포트라 부르기도 합니다.

범용적으로 사용되는 애플리케이션 프로토콜이 일반적으로 사용하는 '널리 알려진, 유명한 포트로 20, 21,22, 23,53, 67,68, 80, 443 가 있습니다.

등록된 포트는 덜 범용적이며 흔히 사용하는 애플리케이션 프로토콜에 할당하기 위해 사용합니다.

1194, 1433,3306,6379,8080

# data[].attributes.attachment_link.description
4. 네트워크 계층 4-1 전공 계층 개요: IP 의 한계와 포트 신뢰할수 없는 통신과 비연결형 통신 IP의 한계를 보완하는 전송 계층 응용 계층과의 연결 다리, 포트 - 포트의 정의 - 포트의 종류 포트 기반 NAT - NAT 변한 테이블 - NAPT 포트 포워팅 후기: 네트워크 구성시때 공부해본 내용들이 들어 있으면 홈네트워크 구성시에 구현한 포트포워딩의 자세한 내용을 알수 있었습니다.

# data[].attributes.body
패들렛을 너무 늦게 봤네요ㅠ 이제라도 제출해봅니다!

https://blog.naver.com/timkawa/223528616863

# data[].attributes.attachment_link.title
혼공단 4주차 : 네이버 블로그

# data[].attributes.body
하필 포스팅하려고 할때 페북이 막혀서 이제서야 올립니다. 늦어서 죄송합니다

# data[].attributes.attachment_link.readable_text
교차검증과 그리드 서치

1. 검증 세트

검증 세트는 하이퍼파라미터 튜닝을 위해 훈련 세트에서 분리한 데이터 세트입니다. 모델의 성능을 평가할 때, 테스트 세트를 사용하지 않도록 합니다.

위 코드에서 데이터를 불러와 훈련 세트와 테스트 세트로 나눈 후, 다시 훈련 세트를 서브 세트와 검증 세트로 분리합니다.

2. 교차 검증

교차 검증은 훈련 세트를 여러 폴드로 나누어, 각 폴드를 번갈아 가며 검증 세트로 사용하고 나머지 폴드를 훈련 세트로 사용하는 방법입니다.

교차검증 방법

1. 데이터를 K개의 폴드로 나눕니다.

2. 각 폴드를 번갈아 가며 검증 세트로 사용하고 나머지 폴드를 훈련 세트로 사용하여 모델을 훈련하고 평가합니다.

3. 모든 폴드에 대해 검증 점수를 얻고, 이를 평균하여 최종 성능을 평가합니다.

아래는 5-폴드 교차 검증의 예시 그림입니다.

Fold 1: 첫 번째 폴드를 검증 세트로 사용하고, 나머지 폴드를 훈련 세트로 사용합니다.

Fold 2: 두 번째 폴드를 검증 세트로 사용하고, 나머지 폴드를 훈련 세트로 사용합니다.

Fold 3: 세 번째 폴드를 검증 세트로 사용하고, 나머지 폴드를 훈련 세트로 사용합니다.

Fold 4: 네 번째 폴드를 검증 세트로 사용하고, 나머지 폴드를 훈련 세트로 사용합니다.

Fold 5: 다섯 번째 폴드를 검증 세트로 사용하고, 나머지 폴드를 훈련 세트로 사용합니다.

교차 검증을 통한 모델 평가 과정

1. 데이터 분할: 전체 데이터를 K개의 폴드로 나눕니다.

2. 모델 훈련 및 검증:

각 폴드에 대해 모델을 훈련하고 검증합니다.

훈련 세트는 (K-1)개의 폴드로 구성되고, 검증 세트는 1개의 폴드로 구성됩니다.

3. 평균 검증 점수 계산: 각 폴드에서 얻은 검증 점수를 평균하여 최종 성능을 평가합니다.

이 코드는 기본 의사결정나무 모델을 훈련하고 검증 세트를 사용해 성능을 평가합니다. 이어서 cross_validate 함수를 사용해 교차 검증을 수행하고, 각 폴드의 성능을 출력합니다.

여기서는 StratifiedKFold 를 사용해 계층적 폴드를 생성하고 교차 검증을 수행합니다. 10-폴드 교차 검증을 통해 모델의 성능을 평가합니다.

3. 하이퍼파라미터 튜닝

하이퍼파라미터 튜닝은 모델의 성능을 최적화하기 위해 필요한 단계입니다. 이를 위해 그리드 서치와 랜덤 서치를 사용합니다.

그리드 서치

이 코드는 GridSearchCV 를 사용해 다양한 하이퍼파라미터 조합을 평가하고, 최적의 하이퍼파라미터를 찾습니다.

이 코드는 더 넓은 범위의 하이퍼파라미터를 탐색하여 최적의 조합을 찾습니다.

랜덤 서치

여기서는 RandomizedSearchCV 를 사용해 랜덤한 하이퍼파라미터 조합을 평가하고 최적의 모델을 찾습니다.

문제 해결 과정 - 최적의 모델을 위한 하이퍼파라미터 튜닝

위의 과정을 통해 최적의 모델을 찾기 위한 하이퍼파라미터 튜닝 과정을 정리할 수 있습니다.

1. 데이터 준비: 데이터를 훈련 세트와 테스트 세트로 나눕니다.

2. 모델 선택: 사용할 모델을 선택합니다. (예: 의사결정나무)

3. 교차 검증 설정: 교차 검증을 위한 폴드 수를 설정합니다.

4. 하이퍼파라미터 탐색: 그리드 서치 또는 랜덤 서치를 사용하여 최적의 하이퍼파라미터를 찾습니다.

5. 최종 모델 훈련: 찾은 최적의 하이퍼파라미터로 전체 훈련 세트를 사용해 최종 모델을 훈련합니다.

6. 모델 평가: 테스트 세트를 사용해 최종 모델의 성능을 평가합니다.

이와 같은 과정을 통해 모델의 예측 성능을 최대화할 수 있습니다.

# data[].attributes.attachment_link.description
교차검증과 그리드 서치

# data[].attributes.body
혼공분석 12기

# data[].attributes.attachment_link.title
수학호기심 : 네이버 블로그

# data[].attributes.body
혼공C 4주차 미션 인증합니다!(페북에서 게시물이 삭제돼서 다시 올려용!)

# data[].attributes.body
감사합니다!

# data[].attributes.attachment_link.readable_text
문제: IP와 연관된 통신 특성으로 알맞은 단어를 보기에서 골라 보세요.

보기: 신뢰성, 연결형, 비신뢰성, 비연결형

정답 : 비신뢰성, 비연결형

연결형(Connection-oriented): 데이터 전송 전에 연결을 설정하여 통신을 하는 방식. 예를 들어, TCP(Transmission Control Protocol)는 연결형 프로토콜입니다. 이 방식은 데이터 전송의 신뢰성을 높이기 위해 사용됩니다.

비연결형(Connectionless): 데이터 전송 전에 연결을 설정하지 않고 각 데이터 패킷을 독립적으로 전송하는 방식. 예를 들어, IP(Internet Protocol)는 비연결형 프로토콜입니다. 이는 데이터 전송의 효율성을 높이기 위해 사용됩니다.

신뢰성(Reliability): 데이터가 정확하게 전달되었는지를 보장하는 특성. 예를 들어, TCP는 신뢰성을 제공하지만 IP는 기본적으로 신뢰성을 제공하지 않습니다.

비신뢰성(Unreliability): 데이터의 정확한 전달을 보장하지 않는 특성. IP는 비신뢰성 특성을 가집니다.

TCP 쓰리 웨이 핸드셰이크 과정

TCP는 신뢰성 있는 데이터 전송을 위해 연결을 설정할 때 "쓰리 웨이 핸드셰이크(Three-Way Handshake)"라는 과정을 거칩니다. 이 과정은 두 컴퓨터 간의 안정적인 연결을 보장하기 위해 사용됩니다.

1. SYN (Synchronize Sequence Numbers)
첫 번째 단계에서는 클라이언트(호스트 A)가 서버(호스트 B)에게 연결 요청을 보냅니다. 이 요청 메시지는 SYN 세그먼트로 표현됩니다. 클라이언트는 이 단계에서 자신이 사용할 초기 시퀀스 번호를 서버에게 알립니다.

2. SYN-ACK (Synchronize-Acknowledge)
두 번째 단계에서는 서버가 클라이언트의 요청을 받고, 연결 요청을 수락하며 응답을 보냅니다. 이 응답 메시지는 SYN-ACK 세그먼트로 표현됩니다. 서버는 자신의 초기 시퀀스 번호를 클라이언트에게 알리고, 동시에 클라이언트의 SYN 세그먼트를 확인합니다.

3. ACK (Acknowledge)
세 번째 단계에서는 클라이언트가 서버의 응답을 받고, 연결이 설정되었음을 알립니다. 이 메시지는 ACK 세그먼트로 표현됩니다. 클라이언트는 서버의 SYN-ACK 세그먼트를 확인하고 연결이 성공적으로 설정됩니다.

핸드셰이크 과정의 시각화:

1. 호스트 A가 호스트 B에게 SYN 세그먼트를 보냅니다.

2. 호스트 B가 SYN-ACK 세그먼트를 호스트 A에게 보냅니다.

3. 호스트 A가 호스트 B에게 ACK 세그먼트를 보냅니다.

이 과정을 통해 두 호스트 간의 연결이 안정적으로 설정됩니다. 이 과정을 완료한 후에 데이터를 주고받을 수 있습니다.

맥 같은 경우는 Activity Moniter에서 프로세스별 PID를 확인할 수 있습니다.

또는 terminal에서 ps -ax 명령어를 통해서도 확인할 수 있습니다.

# data[].attributes.attachment_link.title
[혼공네트] 4주차_정리

# data[].attributes.attachment_link.description
문제: IP와 연관된 통신 특성으로 알맞은 단어를 보기에서 골라 보세요.보기: 신뢰성, 연결형, 비신뢰성, 비연결형 정답 : 비신뢰성, 비연결형 연결형(Connection-oriented): 데이터 전송 전에 연결을 설정하여 통신을 하는 방식. 예를 들어, TCP(Transmission Control Protocol)는 연결형 프로토콜입니다. 이 방식은 데이터 전송의 신뢰성을 높이기 위해 사용됩니다.비연결형(Connectionless): 데이터 전송 전에 연결을 설정하지 않고 각 데이터 패킷을 독립적으로 전송하는 방식.

# data[].attributes.body
4주차 과제 제출합니다~

이번주도 지각했네요ㅠㅠ

# data[].attributes.attachment_link.title
[혼공데분 12기] 4주차 스터디 및 과제

# data[].attributes.attachment_link.description
4주차 계획커리큘럼일정 : 7/22 ~ 7/28진도 : Chapter 04기본 미션 : p. 279의 확인 문제 5번 풀고 인증하기추가 미션 : Ch.04(04-1)에서 배운 8가지 기술통계량(평균, 중앙값, 최솟값, 최댓값, 분위수, 분산, 표준편차, 최빈값)의 개념을 정리하기미션기본 미션ns_book7 남산도서관 대출 데이터에서 1980년~2022년 사이에 발행된 도서를 선택하여 다음과 같은 '발행년도' 열의 히스토그램을 그려보세요추가 미션Ch.04(04-1)에서 배운 8가지 기술통계량(평균, 중앙값, 최솟값, 최댓값, 분위수, 분산, 표준편차, 최빈값)의 개념을 정리하기평균판다스 메서드 : mean()기술통계 표시 : maen중앙값전체 데이터를 순서대로 늘여놓았을 때 중앙에 위치한 값 = 50% 위..

# data[].attributes.body
저번주가 4주차 제출날짜였다니....

혼공족장님 죄송 또 죄송합니다 ㅠㅠ

퇴근하면서 깜짝 놀라 급하게 올립니다.

# data[].attributes.attachment_link.readable_text
이번주 쉬고 다음주에 룰루랄라 쓰면 되겠지 하면서 야간 월급루팡하고 있었는데 갑자기 혼공단 공부를 밀렸다는게 생각났습니다.

저번주에 4주차를 진행했어야 하는데! 3주차를 늦게 제출하면서 깜빡해버린겁니다.

아이고.... 이래서 뭐든지 밀리면 큰일이 나는 거군요...(혼공족장님 미안해요....)

사실 이번 방학주에는 4주차 학습 내용인 DNS와 HTTPS 내용들을 직접 실습해보면서 시리즈로 올려볼려고 했는데 직접 해보니 에러나는것들도 많아 이번 주는 무리고 다음주 5주차에 같이 올려보도록 하겠습니다.

아래는 AWS에 웹페이지만 올린 글입니다.

아직 사진 편집도 안되어 있어서 엉망진창이지만.....

혹시 필요하거나 시간이 남는 분들이 있으시다면 AWS한번 맛한번 보시는건 어떠실까요?
2024.08.01 - [컴퓨터 사이언스/혼공얄코] - [혼공얄코]서버배포부터 SSL인증 그리고 DNS까지 -- 1

[혼공얄코]서버배포부터 SSL인증 그리고 DNS까지 -- 1

이번 시간에는 AWS에서 node.js로 "hello world"를 배포를 진행하고SSL인증서를 적용하고 DNS를 적용하여 웹사이트를 만드는 과정을 직접 진행해보고자 합니다. 우선 AWS에 가입하고 기본적인 설정을 하

hotsan-engineering.tistory.com

2024.08.01 - [컴퓨터 사이언스/혼공얄코] - [혼공얄코]서버배포부터 SSL인증 그리고 DNS까지 -- 2

[혼공얄코]서버배포부터 SSL인증 그리고 DNS까지 -- 2

AWS인스턴스가 만들어 졌으니 이제 간단한 웹페이지를 만들어서 서버에 띄우고 도메인으로 연결해봅시다.우선 우리는 node.js를 이용한 웹 페이지를 배포할려고 하니 node.js와 npm을 AWS인스턴스에

hotsan-engineering.tistory.com

- 기본 숙제(필수): Ch.03 마무리 용어 정리하기(p. 219)

IP : IP란 인터넷이 통하는 네트워크에서 어떤 정보를 수신하고 송신하는 통신에 대한 규약

컴퓨터 사이의 통신을 위한 규칙

IP주소 : IP통신을 위한 고유 주소 -- 전화번호처럼 장치간에 통신을 올바르게 하기 위해 만들어진 주소

아래 사진과 같이 각각의 기계나 컴퓨터에 대해 고유한 IP주소를 할당함

IPv4:8비트씩(0부터 255까지의 숫자) 4부분으로 구분되는 방식

IPv6: 16비트 8부분으로 16진수 표현하는 방식 (IPv4의 주소 부족이 예상되어 미리 준비된 기술)

공인 IP주소

사설 IP 주소--- 보통 192로 시작하면 사설IP다\

공인 IP 주소: 중복되지 않은 고유 IP주소

사설 IP 주소: 공유기 하나로 공인IP를 사용하고 그에 연결된 기기들을 구분할 수 있는 주소를 사설 IP주소라함

고정 IP 주소: IP 주소가 영구적으로 할당되어 변경되지 않는 주소를 의미함

유동 IP 주소: 기기에 고정적으로 IP를 부여하지 않고 남아 있는 IP 주소를 골라 그때 그때 기기에 할당하는 방법

도메인 : 숫자로 이루어진 IP주소 대신 사람이 기억하기 쉽게 변환된 주소를 도메인이라 한다.

DNS : 도메인 이름들과 그에 매칭되는 IP주소들을 모아놓은 시스템을 운용하여

사용자로 부터 도메인 - IP주소 변환요청이 들어오면 확인하여 응답해주는 시스템

WWW : 호스트명중 하나로 www는 World Wide Web 인터페이스를 뜻함.

이 위치에는 서버에 따라 호스트명을 달리 할 수 있고 아래 사진과 같이 용도에 따라 구분하여 사용할 수 있음

mail ,map, shoping 등등 기능에 따라 달라질 수 있음

HTTP : 클라이언트의 요청과 서버의 응답 형식으로 이루어지는 통신규약

HTTPS : 이전의 http 통신규약의 신뢰성과 보안성을 보완하기 위해 만들어진 것

SSL인증서를 서버에 두어 브라우저와 서버간의 확인으로 안전한 페이지인지 확인함
아래 사진은 혼공단 홈페이지의 SSL 인증서

- 추가 숙제(선택): 데이터와 데이터베이스 강의 듣고 핵심 내용 정리하기

정형화된

관계형 데이터베이스 RDBMS : 대표적인 데이터베이스, 가장 오래되고 신뢰성있는 데이터베이스들이 많으며 대부분
SQL언어를 사용함
위 사진과 같이 표처럼 생긴 테이블에 데이터를 저장하고 규칙들을 이용하여
데이터의 일관성과 정확성을 높입니다.
Join과 같은 특수한 기능을 이용하여 좀더 빠르고 편리하게 사용가능함
*Join은 NoSQL에서도 가능함

대표RDBMS : MySQL, Oracle Database , MsSQL -- 대부분 SQL언어를 사용하여 형식이 비슷하며
대기업들과 오래된 기업들의 경우 신뢰성과 편의성을 위해 Oracle 또는 MsSQL을 사용하며
스타트업들과 작은 기업의 경우 무료인 MySQL을 많이 사용함

NoSQL : SQL을 사용하지 않는 여러 유형의 데이터베이스를 뜻함

문서형 : MongoDB --XML이나 JSON 형식으로 저장함, 규칙이 없어 유연함

Key-Value : Redis --키,값 쌍으로 이용,메모리를 사용하 빠른 속도 용량부족 한정된 기능

그래프 데이터베이스 : Neo4j - 노드와 엣지로 그려짐, 관계를 표현하는데 많은 도움이됨

RDBMS 장점

데이터 무결성: ACID 속성으로 데이터 일관성 보장한다 (데이터를 한번에 하나씩만 변경가능)

SQL 표준: 표준화된 쿼리 언어 사용 (MySQL에서 MsSQL로 이식하기 편함)

복잡한 쿼리 처리: 복잡한 조인과 쿼리 지원 (기본적인 기능의 뛰어남- 처리속도 빠름)

데이터 보안: 강력한 보안 기능(오래되어 취약점 분석과 보완이 이루어짐)

RDBMS 단점

확장성 제한: 수평적 확장이 어려움 (추가로 데이터베이스를 확장하기 어려움)

유연성 부족: 스키마 변경이 어려움(데이터베이스를 변경하기 어려움)

복잡성: 복잡한 데이터 관계 관리 필요(정규화 너무 힘들어용)

NoSQL 장점

확장성: 수평적 확장이 용이 (따로 데이터간 관계를 생각하지 않아도 되어 서버만 늘려도 쉽게 확장)

유연한 스키마: 데이터 구조 변경이 쉬움 (이 또한 필드가 없는 데이터를 삽입해도 문제없이 돌아감)

고성능: 특정 쿼리 패턴에 최적화 (Redis와 같은 인메모리 NoSQL의 경우 빠르게 처리가능)

비용 효율성: 오픈 소스와 클라우드에서 비용 절감

NoSQL 단점

일관성 보장 어려움: 데이터 일관성 낮음 (CAP 이론) (데이터 중보 변경시 결함발생가능)

복잡한 쿼리 제한: SQL처럼 복잡한 쿼리 지원 부족

표준화 부족: 표준 쿼리 언어 없음(모든 NoSQL이 다 따로 배워야함)

보안 및 관리: RDBMS에 비해 보안 기능 부족

# data[].attributes.attachment_link.title
[혼공얄코] 4주차 미션

# data[].attributes.attachment_link.description
이번주 쉬고 다음주에 룰루랄라 쓰면 되겠지 하면서 야간 월급루팡하고 있었는데 갑자기 혼공단 공부를 밀렸다는게 생각났습니다.저번주에 4주차를 진행했어야 하는데! 3주차를 늦게 제출하면서 깜빡해버린겁니다. 아이고.... 이래서 뭐든지 밀리면 큰일이 나는 거군요...(혼공족장님 미안해요....)사실 이번 방학주에는 4주차 학습 내용인 DNS와 HTTPS 내용들을 직접 실습해보면서 시리즈로 올려볼려고 했는데 직접 해보니 에러나는것들도 많아 이번 주는 무리고 다음주 5주차에 같이 올려보도록 하겠습니다.

# data[].attributes.body
오와 더 좋잖아.. 너무너무 좋당!

# data[].attributes.attachment_link.title
[네트워크] 혼자 공부하는 네트워크 4주차

# data[].attributes.body
패들렛도 괜찮네요~!! 페북에도 올렸지만 다시 한번 올려요. 족장님 힘내세요오오오 💪

# data[].attributes.attachment_link.title
혼공컴운 - 4주차 혼공학습단 숙제

# data[].attributes.attachment_link.description
4주차 이번주에 제출하고 나면 다음주는 혼공학습단 방학 기간이라 한주는 제출하지 않고 쉴 수 있어요. 이번에는 정해진 기간에 정해진 분량을 읽어보니 그래도 조금씩 읽게 되는 것 같아서 좋아요. 그리고 책마다 분량이 다를 것 같지만 선택한 책이니 끝까지 읽어봐야겠어요! C09 운영체제는 ...

# data[].attributes.body
많이 늦었습니다. 휴가 기간 이후엔 제 때 올리겠습니다 ㅠ

# data[].attributes.attachment_link.readable_text
키워드로 정리하기!

1. 호출은 함수를 실행하는 행위를 뜻함.

2. 매개변수는 함수의 고라호 내부에 넣는 것을 의미

3. 리턴값은 함수의 최종적인 결과를 의미.

4. 가변 매개변수 함수는 매개변수를 원하는 만큼 받을 수 있는 함수.

5. 기본 매개변수는 매개변수에 아무것도 넣지 않아도 들어가는 값.

6. 재귀 함수는 내부에서 자기 자신을 호출하는 함수를 의미.

7. 메모화는 한 번 계샇나 값을 저장해 놓은 후, 이후에 다시 계산하지 않고 저장된 값을 활용하는 테크닉

8. 조기 리턴은 함수의 흐름 중간에 return 키워드를 사용해서 코드 들여쓰기를 줄이는 등의 효과를 가져오는 테크닉

9. 튜플은 리스트와 비슷하지만, 요소를 수정할 수 없는 파이썬의 특별한 문법. 괄호를 생략해서 다양하게 활용 가능.

10. 람다는 함수를 짧게 쓸 수 있는 파이썬의 특별한 문법

11. with 구문은 블록을 벗어날 때 close() 함수를 자동으로 호출해주는 구문.

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

# data[].attributes.attachment_link.description
키워드로 정리하기!1. 호출은 함수를 실행하는 행위를 뜻함.2. 매개변수는 함수의 고라호 내부에 넣는 것을 의미3. 리턴값은 함수의 최종적인 결과를 의미.4. 가변 매개변수 함수는 매개변수를 원하는 만큼 받을 수 있는 함수.5. 기본 매개변수는 매개변수에 아무것도 넣지 않아도 들어가는 값.6. 재귀 함수는 내부에서 자기 자신을 호출하는 함수를 의미.7.

# data[].attributes.body
아이고 많이 늦었지만 올립니닷

# data[].attributes.attachment_link.readable_text
8-1 장치컨트롤러와 장치드라이버

등장배경 : 각 입출력장치 별 데이터 전송 형식이나 속도(전송률)이 다름.

→ 장치 컨트롤러를 통해 이런 문제를 해결하자

장치컨트롤러

CPU와 입출력장치 통신중개와 오류검출 → 데이터 전송 형식 맞춰줌

데이터 버퍼 → 전송률을 맞춰줌

장치 컨트롤러는 세 개의 레지스터를 갖는다.

데이터레지스터 → 버퍼역할

상태레지스터 → 상태정보

제어레지스터 → 수행할 제어정보와 명령 저장

장치드라이버

장치컨트롤러를 제어하는 프로그램. 즉, 장치컨트롤러가 하드웨어고 장치드라이버는 소프트웨어.

8-2 다양한 입출력 방법

장치컨트롤러와 CPU가 데이터를 주고받는 방식. 총 세가지 방식을 학습. 프로그램입출력, 인터럽트 기반 입출력, DMA 입출력.

프로그램 입출력

프로그램 명령어 중 입출력 함수를 만나면(System call) 장치컨트롤러와 상호작용하여 입출력.

e.g)

CPU:write() 함수 → 모니터 컨트롤러의 제어레지스터: 쓰기

모니터 → 상태레지스터 :준비완료

CPU → 상태레지스터 확인 후 데이터 레지스터 : 출력할 데이터

Q. CPU가 장치컨트롤러의 레지스터의 주소를 어떻게 알지?

→ 2가지 방식으로 파악. 메모리 맵 입출력과 고립형 입출력

메모리 맵 입출력

메모리에 접근하기위한 주소공간과 입출력 레지스터에 접근하는 주소공간을 하나의 주소공간으로 간주.

고립형 입출력

메모리 주소공간과 입출력 주소공간을 분리.

인터럽트 기반 입출력

CPU는 각 장치에게 요청을 하고 요청을 다하면 인터럽트 요청을 받게되는 방식.

만약 인터럽트 요청이 많다면 어떻게 해결해야할까?

→ 우선순위를 기준으로 판별

PIC는 여러 장치컨트롤러의 인터럽트 요청의 우선순위를 판별하여 CPU에게 전달한다

DMA입출력

프로그램입출력, 인터럽트입출력은 모두 CPU가 데이터 이동을 주관한다. 이는 CPU에 오버헤드가 발생할 수 있다. 따라서 입출력을 주관하는 하드웨어를 사용하자! → Direct Memory Access Controller 등장!

DMA에게 요청하면 입출력을 처리한 후 인터럽트 요청을 CPU에게 보냄으로서 역할이 끝났음을 알린다.

단, 이때 시스템버스에 따른 오버헤드가 있으므로 입출력버스를 따로 만들어서 시스템버스의 사용빈도를 줄이게 된다.

9-1 OS개요와 배우는 목적

운영체제 : 프로세스의 자원을 관리하고 올바르게 실행될 수 있도록 돕는 프로그램

메모리 = 커널영역 + 사용자영역. 운영체제는 시스템부팅 시 커널영역에서 실행된다.

왜 배우는가 : 운영체제를 이해해야 에러메세지를 이해하고 문제를 해결할 수 있다.

9-2 운영체제의 큰 그림

3가지를 학습해보자

커널

운영체제의 핵심 서비스를 담당하는 부분.

단, 사용자 인터페이스 CLI, GUI는 커널이 담당하는 서비스가 아니다.

이중모드와 시스템콜

프로세스는 반드시 커널을 통해 자원을 요청해야한다. 따라서 커널을 이용하려면 시스템콜을 써야한다.

이중모드는 명령어 실행을 사용자모드와 커널모드로 구분하는 방식이다.

일반적인 애플리케이션은 사용자모드로 명령어가 실행되고 시스템콜을 처리할 때는 커널모드로 명령어가 실행된다.
시스템콜에 대해 조금 더 알아보자.
Signal함수를 사용하지 않아도 시스템콜 자체는 소프트웨어 인터럽트이다. 그래서 시스템콜을 처리할 때는 인터럽트를 처리하는 과정과 비슷하다.

1.작업을 벡업하고

2.인터럽트 서비스 루틴(시스템콜)을 실행하고

3.기존의 애플리케이션으로 복귀하게 된다.

OS의 핵심서비스

프로세스 관리 : PCB, Dead Lock

자원 관리 : CPU(Scheduling), Mem, I/O(시스템콜, 하드웨터 인터럽트 서비스 루틴)

파일시스템 관리

++ 가상머신과 운영체제

가상화를 지원하는 CPU는 사용자모드, 커널모드, 가상머신을 위한 하이퍼바이저 모드가 있습니다.

따라서 가상머신에 설치된 운영체제는 하이퍼바이저 모드로 동작하여 Host OS로부터 커널을 제공받게 됩니다.

프로세스는 실행중인 프로그램입니다. 백그라운드 프로세스 중 사용자와 상호작용 할 수 없다면 데몬이라 부릅니다. cron프로세스가 이에 해당되겠네요.

10-1 프로세스 개요

PCB

프로세스와 관련된 정보 저장. 커널이 관리한다.

PID

register값 : 프로그램카운터, 각종레지스터 값들..!

프로세스 상태 : ready, run, wait

CPU스케줄링정보

메모리 정보 : 베이스레지스터, 한계레지스터, 페이지 테이블 정보

사용한 파일과 입출력장치

Context Switching

프로세서가 실행할 프로그램을 변경할 때 PCB정보를 벡업하고 갈아끼우는 것을 의미.

프로세스와 메모리

하나의 프로세스는 코드, 데이터, 힙, 스택 영역을 메모리에 갖게 된다.

코드영역 : 기계어로된 명령어가 저장

데이터영역 : 전역변수가 저장. C로 따지면 static

힙영역 : 동적할당한 메모리가 저장.

스택영역 : 지역변수, 매개변수, 함수 호출 시 사용되는 공간

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

내가 들었던 강의의 교안을 가져왔다.

created

ready : processor 자원을 기다리고 있는 상태. 할당받으면 dispatch된다고 한다.

running

preemption : CPU자원을 뺏긴 상태

block : 입출력작업을 기다려야하는 상태.

asleep

wakeup: 작업 완료 시 인터럽트 요청을 받으면 ready Queue에 들어가게 된다.

프로세스 계층구조

프로세스는 fork()를 통해 자식 프로세스를 생성할 수 있다.

OS는 보통 이렇게 fork()를 통해 계층구조로 프로세스를 관리한다.

부팅 시 최초의 프로세스 → 자식프로세스들 생성 : 트리구조

e.g) 부팅 시 최초의 프로세스 → 로그인 프로세스 → bash쉘 → vim프로세스

프로세스 생성기법

fork() : 자식프로세스 생성 → 부모의 모든 것을 상속받는다. 단, PID나 베이스 레지스터 위치는 다르다.

exec() : 자신의 메모리 공간을 다른 프로그램으로 교체. 즉, 코드, 데이터영역은 실행할 프로그램. 힙, 스택은 초기화

e.g) bash쉘에서 ls명령어실행 → fork → exec (ls명령어) : ls 명령어를 실행하기 위한 자식프로세스를 생성한다!

즉, 프로세스 계층구조는 fork와 exec이 트리구조로 이루어져 있는 것.

프로세스간 통신

IPC (Inter-Process Communication) : 같은 컴퓨터 내의 서로 다른 프로세스나 스레드끼리 데이터를 주고받는 것.

파일을 통한 통신 : hello.txt 에 쓰는 프로세스. 읽는 프로세스.

메모리를 통한 통신 : 공유 메모리의 데이터를 통해 프로세스간 데이터 전달.

소켓, 파이프를 통한 통신 : 파이프(|)를 통해 통신.

10-3 Thread

들어가기 앞서 5장의 내용을 리마인드 해보자.

코어 : 명령어 실행 부품

하드웨어 스레드 : 코어가 한번에 처리할 수 있는 명령어의 수

멀티코어 : 코어가 여러개

멀티스레드 프로세서 : 하나의 코어가 동시에 처리할 수 있는 명령어의 수

소프트웨어 스레드 : 프로세스에서 실행의 단위. 즉, 프로세스를 구성하는 여러 명령어를 동시에 처리한다.

우리는 소프트웨어 스레드를 배우며 보통 스레드라 하면 소프트웨어적 스레드를 의미한다.

스레드는 프로세스의 자원(힙, 코드, 데이터)을 공유한다. 스레드는 각각 TID, 프로그램카운터 같은 레지스터값, 스택으로 구성된다.

CPU자원을 프로세스에게 어떻게 배분할 것인가.

11-1 우선순위

프로세스의 우선순위는 어떻게 매길 수 있을까?

보통 입출력작업은 대기 상태로 자주 들어가게 되므로 우선순위가 높습니다. 그 외에도 실시간 프로세스, 일부 벡그라운드 프로세스도 우선순위가 높습니다.

PCB에 우선순위를 명시하고 먼저 처리할 프로세스 결정.

스케줄링 큐

매번 실행할 때마다 PCB를 확인해서 우선순위를 확인하는 것은 비용이 많이 든다.

Ready Queue : CPU자원 사용 큐

Waiting Queue : 입출력관련 인터럽트를 기다리는 큐
특정IO Queue : 입출력관련 자원을 사용해야하는 큐 e.g)프린트큐, 하드디스크큐

특징

1. 큐는 FIFO지만 우선순위에 따라 먼저 처리되는 PCB가 있을 수 있다.

2. 입출력이 완료되어 완료 인터럽트가 발생하면 Waiting Queue의 PCB를 Ready Queue로 이동시킨다.

선점형과 비선점형

선점형 (preemptive) : OS가 CPU를 뺏어서 급한 거 먼저 할당 가능한 스케줄링

비선점형 (non-preemptive) : 프로세스가 종료되거나 대기상태로 가기 전까지 기다려야하는 스케줄링

대부분의 OS는 선점형을 사용.

11-2 스케줄링 알고리즘

알고리즘의 아이디어에 집중하자.

FCFS Scheduler(First Come First Served)

먼저 Queue에 들어온 작업부터 처리

비선점형

호위효과 (Convoy Effect) : 금방 끝날 수 있는 작업이 오래기다려야하는 현상.

SJF(Shortest Job First)

가장 짧은 작업시간부터 처리

RR(Round Robin)

정해진 타임슬라이스만큼 작업을 수행. 타임슬라이스의 크기가 크다면 호위효과, 작다면 Context switching 오버헤드가 커진다.

SRT (Shortest Remaining Time)

RR + SJF. 즉, 가장 짧은 것부터 타임슬라이스만큼 동작시킨다.

우선순위 스케줄링 (Priority)

높은 우선순위부터 처리한다. SRT, SJF가 넓은 범위에서 우선순위 스케줄러이다.

기아현상(starvation) : CPU자원이 할당되지 못하는 작업 발생 가능.

→ 에이징 기법으로 처리 가능 (대기중인 프로세스의 우선순위를 증가시킨다)

Multilevel queue 다단계 큐

우선순위 스케줄러의 발전된 형태. 우선순위별로 큐들을 사용해서 높은 우선순위큐부터 처리한다.

큐별로 다양한 스케줄링을 적용가능하다.

Multilevel Feedback Queue 다단계 피드백큐

다단계 큐의 발전된 형태. 기아현상을 해결. 프로세스가 큐 사이를 이동 가능하게 한다. 가장 일반적인 CPU 스케줄링 알고리즘

CPU오래 사용해야하는 프로세스는 점차 낮은 순위로!

너무 오래 기다리는 프로세스는 에이징 기법으로 높은 순위로!

숙제

304페이지 1.생성 2.준비 3.실행 4.종료 5.대기

추가숙제

FCFS를 적용하면 ABCD순으로 처리됩니다.

# data[].attributes.attachment_link.description
8장 입출력장치8-1 장치컨트롤러와 장치드라이버등장배경 : 각 입출력장치 별 데이터 전송 형식이나 속도(전송률)이 다름.→ 장치 컨트롤러를 통해 이런 문제를 해결하자장치컨트롤러CPU와 입출력장치 통신중개와 오류검출 → 데이터 전송 형식 맞춰줌데이터 버퍼 → 전송률을 맞춰줌장치 컨트롤러는 세 개의 레지스터를 갖는다.데이터레지스터 → 버퍼역할상태레지스터 → 상태정보제어레지스터 → 수행할 제어정보와 명령 저장장치드라이버장치컨트롤러를 제어하는 프로그램.

# data[].attributes.body
혼공스 4주차 제출합니다

# data[].attributes.body
이미 페북에 올렸지만 연습삼아 올립니다. 😄 더 편해진거 같아요 😍 즐거운 여름방학 보내세요!

# data[].attributes.body
대지각입니다ㅜㅜ 늦어서 죄송합니다ㅠ

# data[].attributes.attachment_link.title
안녕하세요. 이재석입니다. : 네이버 블로그

# data[].attributes.body
페이스북에 남겨 놓았는데 댓글이 없어서 확인해보니 이곳으로 이사를

잠시 휴가를 보내고 와보니 이사를 와 있어서

이곳에 다시 링크 남겨요 .

# data[].attributes.attachment_link.title
usna7님의블로그 : 네이버 블로그

# data[].attributes.body
혼공SQL 4주차 인증입니다 !
https://jiy-0712-programming.tistory.com/24

페이스북에 올렸다가 여기 올려야 한다는 혼공족장님 댓글에 급히 올렸습니다 !

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

# data[].attributes.attachment_link.readable_text
Chapter 05. 테이블과 뷰
*기본키 primary key (중복되지 않고, null 안 됨)

*외래키 foreign key (기본키-외래키 관계로 연결된 테이블에서 데이터 삭제시 외래키 설정 테이블에서 먼저 삭제해야 함)

ㄴ unique key 조건은 중복되지 않는 유일한 값을 입력하는 것 인데, null 허용 (primary key와의 차이점)

*고유키 unique key (실수로 숫자가 잘 못 입력되는 것을 방지하는 제약조건 = data integrity 보장)

* on update cascade : 기준 테이블 데이터 삭제 시, 참조 테이블 데이터도 삭제

* check : 입력되는 데이터 점검 (반드시 기준값 이상 또는 양수 등..)

ㄴ check ~~~ is violateed : 체크 조건에 위배되 시 발생하는 오류

* default : 값을 입력하지 않으면 자동으로 입력될 값 지정

ㄴ default 160 : 값 입력하지 않으면 기본적으로 160으로 값이 지정됨

* not null : null값을 허용하지 않음 (null <> ' 공백 ' 또는 0)

2. 가상의 테이블 = 뷰view 테이블

* 뷰는 데이터를 가지고 있지 않고, select 문으로 만들어져 있음 (테이블 바로가기)

* 뷰 테이블 : v_테이블이름

create view [뷰테이블 이름]

as

select [가져올 열이름];

select [열이름] from [뷰테이블이름]

where [조건] ;

* 열 이름에 공백이 있으면 백틱(`)으로 묶어줌

# data[].attributes.attachment_link.title
[혼공12기] 4주차_혼자공부하는SQL

# data[].attributes.attachment_link.description
혼자 공부하는 SQL 용어노트#진도기본 숙제(필수)추가 숙제(선택)1주차(7/1 ~ 7/7)Chapter 01 ~ 02p. 80의 shop_db의 회원 테이블(member)에서 아이유 회원에 대한 정보만 추출한 후 결과 화면 인증하기데이터베이스 개체 3가지 설명하기2주차(7/8 ~ 7/14)Chapter 03p. 138의 확인 문제 2번 풀고 인증하기데이터 입력, 삭제하는 기본 형식 작성하기3주차(7/15 ~ 7/21)Chapter 04p. 195의 확인 문제 4번 풀고 인증하기p.

# data[].attributes.body
저번주는 정처기 준비한다고 작성을 못했네요.

얼마 안 남았으니까 모두 힘냅시다 ㅎㅎ

# data[].attributes.attachment_link.readable_text
4주차 (7/22 ~ 7/28)
Chapter 04

Ch.04(04-1) 확인 문제 1번(p.206), (04-2) 확인 문제 2번(p.225) 풀고 설명하기

작업 관리자에서 프로세스별 PID 확인해 보기

5주차 (8/5 ~ 8/11)
Chapter 05

Ch.05(05-1) 확인 문제 1번(p.271), (05-2) 확인 문제 2번(p.307), 풀고 설명하기

HTTP 요청 메시지 확인해 보기

6주차 (8/12 ~ 8/18)
Chapter 06~07

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

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

전송 계층 : 네트워크 계층(IP)과 응용 계층(Application) 사이에 위치하면서, 신뢰성 있는 통신을 가능케 하고(TCP/UDP) 요청하거나 받은 애플리케이션을 식별할 수 있게 함(Port)

네트워크 계층과 연결되는 전송 계층 : 네트워크 계층(IP)은 통신을 가능하게 하지만(주소 역할), 비신뢰성, 비연결성의 특징을 가지고 있다.

패킷이 성공적으로, 순서대로 전송되었다는 보장이 없고, 그냥 해당 주소로 보낼 뿐이다.

네트워크 계층에는 ICMP라는 프로토콜을 통해 송신지의 호스트와의 네트워크 연결에 문제는 없는지, 요청을 보내면 응답이 잘 오는 지는 확인할 수 있지만 말 그대로 '확인'일 뿐이고, 신뢰성 있게 정보를 주고받는다는 '보장'은 하지 않는다.

이렇게 무책임할 수가

이에 대한 보장을 전송 계층의 TCP가 돕는다. TCP는 수신지와 송신지 상에 가상의 회선을 설정하고 각종 제어를 통해 신뢰성있는 통신을 '보장'한다. 물론 신뢰성 있는 통신의 '보장'보다 '속도'가 더 중요한 상황을 위한 UDP도 존재한다.

응용 계층과 연결되는 전송 계층 : 패킷을 송신지까지 전달하는 데에 성공했다. 그럼 그걸 어느 프로그램(프로세스)에 전달해야 할까? 이를 돕는 것이 응용 계층과 연결되는 전송 계층 부분이다.

ex) 검색을 하기 위해 크롬 4개를 켜고 4개 모두 구글에 접속했다. 접속된 홈페이지 모양은 모두 같고, 구글에 해당 페이지를 달라고 요청한 IP, 전송받은 데이터 모두 별반 다르지 않을 텐데 어떻게 4개의 브라우저를 구분해서 데이터를 보내줬을까? 'Port' 덕분

포트는 2의 16승(16비트)까지 표현 가능하며 총 65536개가 존재함.

이 중, 웹브라우저에는 49152~65535 사이의 동적 포트가 지정되어 여러 개를 켜도 구분 가능함.

TCP handshake

TCP 연결 수립은 3way-handshake로

호스트 A(클라이언트)(나 보낼 거 있어. or 받을 거 있어. 통신하자 / SYN) -> 호스트 B(서버)(확인. 나도 열게 / SYN/ACK) -> 호스트 A(열린 거 확인 / ACK)

TCP 연결 종료는 4way-handshake로

호스트 A(다 보냈어. 닫자 / FIN) -> 호스트 B(확인. / ACK) / 호스트 B(나 닫았어. / FIN) -> 호스트 A(확인. / ACK)

TCP의 오류제어, 흐름제어, 혼잡제어

오류제어 : 세그먼트를 보낸 후 수신 측에서 올바른 순서의 세그먼트를 요구하지 않거나, ACK 세그먼트를 아예 보내지 않아 타임아웃이 났을 때 세그먼트를 재전송해서 오류를 제어함

재전송 기법(ARQ(Automatic Repeat Request)) 종류

Stop-and-Wait : 세그먼트를 하나 보낸 후 다음 세그먼트를 보내달라는 ACK 세그먼트가 오면 보냄(안정적이나 회선에 대한 이용 효율이 떨어져 요즘 사용 x)

Go-Back-N : 세그먼트를 계속 보내다가 수신 측에서 올바른 다음 순서의 ACK 세그먼트를 일정 시간 이상 보내지 않으면 타임아웃이 발생하며 해당 순서의 세그먼트부터 다시 보냄

ex) 1, 2, 3, 4, 5~ 세그먼트를 쭉 보내는데 3번 세그먼트의 ACK가 계속 오지 않음.

이때, 수신 측은 받은 3번 세그먼트에 문제가 있었고 추가적으로 들어오는 세그먼트(4, 5~)들을 다 지우고 ACK를 안 보내버림. 그럼 타임아웃 이후 송신 측은 3번부터 쭉 다시 보냄.

Selective Repeat : 선택적으로 못 받은 세그먼트 재전송. 단 송신 측과 수신 측 모두 Selective Repeat를 지원해야 함. 만약 지원을 안 하면 Go-Back-N으로.

ex) 1, 2, 3, 4, 5~ 세그먼트를 쭉 보내는데 3, 5번 세그먼트의 ACK가 누락되고 4, 6~에 대한 ACK 받음.

송신 측은 이후 3, 5번 세그먼트를 다시 보냄.

흐름제어 : 수신 측은 한 번에 받을 수 있는 세그먼트의 크기가 한정되어 있음. 이를 넘으면 수신 측에서는 처리가 불가능하기 때문에, 처리할 수 있는 크기를 TCP 헤더의 윈도우에 표시. 송신 측에서는 이를 보고 적당한 크기의 윈도우로 보냄.

혼잡제어 : 송신 측의 네트워크 상태에 따라 보낼 데이터 양을 조절함.(혼잡 윈도우라는 것을 통해 / 혼잡 윈도우는 송신 측의 네트워크 상황에 따른 문제이기 때문에, 따로 header에 없음)

원래 송신 측 호스트에서 혼잡 윈도우를 계산해서 수행했지만, 요즘은 네트워크 중간 장치(주로 라우터)의 도움을 받는 명시적 혼잡 알림(ECN(Explicit Congestion Notification))이라는 기술을 통해 좀 더 빨리 혼잡 상황에 대한 감지가 가능해 짐.

혼잡 제어 종류

느린 시작 알고리즘 : 혼잡 윈도우의 크기를 지수적으로 증가시킴. 그러다 따로 정해진 느린 시작 임계치 값 이상이 되거나, 타임아웃이 발생하거나, 수신측으로부터 세 번의 중복 ACK를 받으면 혼잡 윈도우의 크기를 조절함

느린 시작 임계치 값 이상이 될 시 : 느린 시작 종료 -> 혼잡 윈도우를 절반으로 초기화 -> 혼잡 윈도우를 1씩 증가시키는 혼잡 회피 수행

타임아웃 발생 : 혼잡 윈도우 값을 1로, 느린 시작 임계치를 혼잡이 감지되었을 시점의 혼잡 윈도우 값의 절반으로 초기화 후 느린 시작 재개

수신 측으로부터 세 번의 중복 ACK 발생 : 해당 번호의 세그먼트를 바로 보내주고(빠른 재전송) 바로 혼잡 회피를 수행(빠른 회복 알고리즘)

접기 시작

IP와 연관된 통신 특성으로 알맞은 단어를 <보기>에서 골라 보세요. 비신뢰성, 비연결성

<보기> 신뢰성, 연결성, 비신뢰성, 비연결성

다음은 TCP 쓰리 웨이 핸드셰이크 과정을 나타내는 그림입니다. 괄호 안애 들어갈 말을 <보기>에서 골라 보세요. ACK

<보기> SYN, ACK, FIN

참조
5. TCP 연결과 해제 (brunch.co.kr)

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

https://ff-tb02.tistory.com/95

4주차 숙제는 다 했었는데 패들랫에 이제서야 업로드하네요! 12분 후 시작될 새로운 주도 파이팅입니다 :D

# data[].attributes.attachment_link.readable_text
[ 운영체제 ]

실행할 프로그램에 필요한 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 프로그램

- 모든 프로그램은 하드웨어를 필요로 한다.

- 이때 프로그램 실행에 마땅히 필요한 요소들을 (시스템) 자원이라고 하며, 프로그램 실행에 있어 반드시 필요하다.

(ex : cpu, 메모리, 입출력 장치와 같은 컴퓨터 부품들이 그 예시)

- 인터넷 브라우저, 게임과 같은 프로그램과 같은 프로그램이다.
2. 역할 및 특징
- 응용 프로그램과 하드웨어 사이에서 응용 프로그램이 필요한 자원을 할당하고, 응용 프로그램이 올바르게 실행되도록 관리한다.

- 다른 프로그램과 마찬가지로 메모리에 적재되어야 하는데,

운영체제는 특별한 프로그램이기 때문에 컴퓨터가 부팅될 때, 메모리 내 커널 영역이라는 공간이 적재되어 실행된다.

( 커널 영역을 제외한 사용자가 이용하는 응용 프로그램이 적재되는 영역은 사용자 영역 )

- 한 프로그램이 CPU를 독점하면, 다른 프로그램들이 올바르게 실행될 수 없기 때문에 운영체제는 최대한 공정하게 여러 프로그램에 CPU 자원을 할당한다.

- 하드웨어를 조작하고 관리하는 기능을 제공하기 때문에, 코드를 직접 작성할 필요가 없다.

[ 커널 ]
1. 정의 컴퓨터의 핵심기능인 자원에 접근하고 조작하는 기능, 프로그램이 올바르고 안전하게 실행되게 하는 기능을 담당
사용자가 실행하는 프로그램이 하드웨어 자원에 직접 접근하는 것을 방지해 자원을 보호한다.
2. 역할 및 특징 컴퓨터의 핵심기능인 자원에 접근하고 조작하는 기능, 프로그램이 올바르고 안전하게 실행되게 하는 기능을 담당
- 1차적으로 운영체제를 거쳐 접근할 수 있도록 함으로써, 문지기 역할을 수행한다.

- 운영체제가 설치된 모든 기기에는 커널이 있다. ( => 사람의 심장, 자동차의 엔진과 비슷한 역할 )

[ 이중모드 ]
1. 정의
CPU가 명령어를 실행하는 모드를 크게 사용자 모드/커널 모드로 구분하는 방식
2. 역할 및 특징 컴퓨터의 핵심기능인 자원에 접근하고 조작하는 기능, 프로그램이 올바르고 안전하게 실행되게 하는 기능을 담당
- 1차적으로 운영체제를 거쳐 접근할 수 있도록 함으로서, 문지기 역할을 수행한다.

- 운영체제가 설치된 모든 기기에는 커널이 있다. ( => 사람의 심장, 자동차의 엔진과 비슷한 역할 )\

- 사용자 모드와 커널모드로 실행 방법이 갈린다.
1. 사용자 모드
-일반적인 응용 프로그램은 기본적으로 사용자 모드로 실행된다.

- 운영체제 서비스를 제공받을 수 없는 실행 모드

- 커널 영역의 코드를 실행할 수 없는 모드

- 하드웨어 자원에 접근하는 명령어를 실행할 수 없다.
2. 커널 모드
- 운영체제 서비스를 제공받을 수 있는 실행 모드

- 커널 영역의 코드를 실행할 수 있는 모드

- 하드웨어 자원에 접근하는 명령어까지 모두 실행할 수 있다.
시스템 호출
- 사용자 모드로 실행되는 프로그램이 자원에 접근하기 위해 운영체제에 요청을 보내 커널 모드로 전환될 때 필요한 요청

=> 이를 통해 커널 모드로 전환되어 서비스를 제공받을 수 있다.

- 일종의 소프트웨어 인터럽트

[ 운영체제의 핵심 서비스 ]
1. 프로세스 관리
- 실행 중인 프로그램( =프로세스 )

- 하나의 CPU는 하나의 프로세스만 실행할 수 있기에 여러 개의 프로세스의 실행을 전환하는 것을 반복하는데, 이 다양한 프로세스를 관리하고 실행하는 역할을 수행한다.
2. 자원 접근 및 할당
- 실행을 위해 자원을 필요로 하는 프로세스들이 사용할 자원에 접근하고 조직함으로써 프로세스에 필요한 자원을 할당해 준다.
2-1. CPU
-한 번에 하나의 프로세스만 실행할 수 있는 CPU에게 어떤 순서로, 얼마나 할당할지 스케줄을 짠다.
2-2. 메모리
- 메모리에 적재된 다양한 크기와 주소를 가진 프로세스들을 어느 주소에 적재해야 할지 결정한다.
2-3. 입출력장치
- 인터럽트를 처리하는 서비스 루틴을 제공해 입출력작업을 수행한다.
3. 파일 시스템 관리
파일들을 폴더로 묶어 관리한다.

# data[].attributes.attachment_link.title
[혼공학습단 12기] 9장, 운영체제 시작하기

# data[].attributes.attachment_link.description
운영체제 ]1. 정의 실행할 프로그램에 필요한 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 프로그램 - 모든 프로그램은 하드웨어를 필요로 한다.- 이때 프로그램 실행에 마땅히 필요한 요소들을 (시스템) 자원이라고 하며, 프로그램 실행에 있어 반드시 필요하다. (ex : cpu, 메모리, 입출력 장치와 같은 컴퓨터 부품들이 그 예시) - 인터넷 브라우저, 게임과 같은 프로그램과 같은 프로그램이다.

# data[].attributes.body
4주차 제출합니다. 족장님, 더운데 고생 많으시네요.

# data[].attributes.attachment_link.title
[혼공분석] 4주차_데이터 요약하기

# data[].attributes.attachment_link.description
Pandas 기술통계Pandas는 데이터프레임에서 기본적인 몇 가지 기술통계를 자동으로 추출해 주는 describe() 메서드를 제공한다.ns_book6.describe() count누락된 값을 제외한 데이터 개수mean평균std표준편차min쵯소값25%25% 값50%중앙값75%75% 값max최댓값 25%, 50%, 75% 이외의 위치에 해당하는 값을 확인하고 싶다면 percentiles 매개변수를 사용한다.describe(percentiles = [0.3, 0.6, 0.9]) 중앙값 구하기중앙값은 데이터를 순서대로 늘어 놓았을 때 중앙에 위치한 값이다. Pandas에서는 중앙값을 구하기 위한 median() 메서드를 제공한다. 중복값을 제외하고 중앙값을 구하려면 drop_duplicates() 메서드와…

# data[].attributes.body
자격증공부하느라 바빠서 늦었습니다..!ㅜ

# data[].attributes.attachment_link.title
제목없음 : 네이버 블로그

# data[].attributes.body
(늦은) 혼공컴운 4주차 학습기록을 제출합니다. 5주차는 부지런히 마감기한을 지켜 돌아올게요! :)

# data[].attributes.attachment_link.readable_text
혼공학습단, 혼공컴운 4주차 학습 기록을 이제서야 올린다,,^^

원래 4주차는 7월 28일까지 학습 후 기록을 공유해야 했지만

여차저차 공부일정이 미뤄져 8월 5일 오늘에서야 학습 기록을 정리해 본다.

늦었지만, 앞으로는 더 학습일정을 틈틈이 잘 챙기고 미루지 않도록 노력할 것을 다짐하며!

혼공컴운 4주차 학습 레쓰고~!

4주차에서는 1~3주차간의 컴퓨터구조 학습 이후 운영체제 학습에 돌입해 9~11장을 학습했다.

4주차 학습미션은 다음과 같았다.

기본 숙제(필수): p. 304의 확인 문제 1번 풀고 인증하기

기본 숙제(필수): p. 304의 확인 문제 1번 풀고 인증하기

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

=> 이 문제를 풀기 위해서는 '선입 선처리 스케줄링 알고리즘'에 대해 알아야 한다.

선입 선처리 스케줄링은 운영체제가 사용하는 CPU 스케줄링 알고리즘의 한 종류로,

프로세스에 CPU라는 자원을 효과적으로 분배하는 일종의 '규칙'과도 같은 체계다.

이러한 CPU 스케줄링 알고리즘의 종류는 운영체제마다, 매우 다양하고 책에서도 7종류를 살펴보았는데

이를 '암기'하기 보다도 이러한 알고리즘에서 채택한 '아이디어'에 집중하여 살펴보는 것이 중요하다.

'선입 선처리 스케줄링'은 FCFS 스케줄링으로도 불리며 준비 큐(CPU 실행을 기다리는 프로세스들이 저장되는 큐)에

프로세스가 들어온 순서대로 CPU를 할당하는 방식이다. 더하여 선입 선처리 스케줄링은 비선점형 스케줄링 방식이라는 특징을 가지는데, 비선점형/선점형은 추후에 들어오는 프로세스를 기준으로 CPU를 비선점한다/선점한다로 이해하면 연상하기 쉽다. 즉, 비선점형 스케줄링 방식은 추후에 프로세스가 실행 중인 CPU 사용을 요청해도 실행하던 프로세스 종료 후에 할당받을 수 있는 스케줄링 방식이다.

따라서 A,B,C,D 순으로 삽입된 준비 큐에 선입 선처리 스케줄링 알고리즘을 적용하면 준비 큐에 삽입된 순서대로 A>B>C>D 순서대로 CPU를 할당받아 실행된다.

그리고 이 추가선택 문제는 실제 책에 있는 11-2 확인 문제와 동일한 문제였음을 푼 후에야 실감했다 ㅋㅋ

숙제 점검은 이렇게 끝이 났고 9~11 챕터를 간단하게 메모하듯 학습을 정리하며 이번 기록을 마무리해 보자.

[9강] / 한줄요약: 운영체제란 무엇이며 왜 사용해야 하는지

운영체제는 커널 영역에 적재되어 사용자 영역(응용 프로그램이 적재된 메모리 공간)을 영역별 분담하여 관리한다.

운영체제는 이중모드를 통해 자원에 대한 사용자 영역의 접근 및 사용을 관리한다. 사용자 영역은 기본적으로 사용자 모드로 실행되며 이때 자원에 접근은 불가하다. 따라서 사용자 영역은 자원을 이용하기 위해 커널모드 변경으로 운영체제의 도움을 받아 자원을 할당받고 실행할 수 있다. 즉 이중모드는 사용자모드와 커널모드를 말한다.

운영체제는 자원을 할당하는 역할을 수행하는 만큼 CPU 할당에도 관여하는데 시스템 호출(인터럽트)의 도움을 받아 효율적인 CPU 자원 할당을 도모한다. 또한 사용자 모드에서 커널 모드 전환을 위해 사용되는 것이 시스템 호출이기도 하다.

[10강] / 한줄요약: 프로세스와 스레드

프로세스란 메모리에 올라가 실행을 준비하는 프로그램이다. 이러한 프로세스는 포그라운드, 백그라운드(데몬, 서비스) 프로세스로 종류가 나뉘며 PCB(프로세스 제어 블록)에 프로세스의 정보를 저장하여 파악한다.

프로세스 메모리 동적 할당 구역: 스택, 힙 / 정적 할당 구역: 데이터, 코드

프로세스를 실행하는 과정에서 다른 프로세스 실행으로 바꾸는 '문맥 교환'도 빈번히 발생하는데, 이때 PCB를 활용하여 백업 및 복구 작업을 구현할 수 있다. 문맥 교환은 CPU 스케줄링에 필수적인 기술이며 너무 많이 발생하면 오버 헤드 문제를 야기한다.

프로세스는 실행 과정에 따라 생성 / 준비 / 실행 / 대기 / 종료 상태로 구분되는 '프로세스 상태 다이어그램'을 가지며 부모-자식 프로세스 계층 구조를 가진다. fork() 실행을 통해 자식 프로세스를 생성할 수 있으며 exec를 통해 자식 프로세스의 경우 부모로부터 복제된 프로그램을 실행하기 위한 세팅 후 실행이 가능하다.

마지막 스레드는 프로세스 내 실행 흐름 단위로 여러 프로세스를 동시에 실행하는 '멀티프로세스', 여러 스레드로 프로세스를 동시에 실행하는 '멀티스레드'의 비교를 통해 스레드의 특징을 뚜렷이 파악할 수 있다. 멀티프로세스와 멀티스레드로 구현한 프로그램의 결과는 동일하더라도 가장 큰 차이는 프로세스 간에는 자원 공유를 하지 않아 문제가 발생해도 모든 프로그램이 문제를 겪지 않지만, 동일한 프로세스에 소속된 스레드는 서로 자원을 공유하기 때문에 하나의 스레드에 문제가 발생하면 다른 스레드도 영향을 받는다.

[11강] / 효과적인 자원 분배, CPU 스케줄링

11강에서는 앞서 추가 선택 문제에서 적용한 개념인 CPU 스케줄링에 대해 중점적으로 다룬 강의라 더 추가적으로 기록할 중심 내용은 없으나, 효과적인 CPU 스케줄링 알고리즘을 구현하기 위해 다양한 개념을 사용한다는 것 정도만 알아두면 좋을 것 같다.

- 호위효과 : 프로세스의 실행시간보다 CPU 할당받기 위해 대기 시간이 더 긴 경우

- 기아 현상 : 우선순위에 밀린 프로세스가 계속해서 CPU 할당 순서에서 밀려나 대기하는 경우

- 에이징 기법 : 대기 시간에 비례하여 우선순위를 업그레이드하는 기법

- 타임 슬라이스 : CPU 할당 후 실행시간을 일정하게 정하여 할당하는 기법

# data[].attributes.attachment_link.title
[혼공컴운] 4주차_OS 첫걸음

# data[].attributes.attachment_link.description
혼공학습단, 혼공컴운 4주차 학습 기록을 이제서야 올린다,,^^원래 4주차는 7월 28일까지 학습 후 기록을 공유해야 했지만여차저차 공부일정이 미뤄져 8월 5일 오늘에서야 학습 기록을 정리해 본다.늦었지만, 앞으로는 더 학습일정을 틈틈이 잘 챙기고 미루지 않도록 노력할 것을 다짐하며!혼공컴운 4주차 학습 레쓰고~! 4주차에서는 1~3주차간의 컴퓨터구조 학습 이후 운영체제 학습에 돌입해 9~11장을 학습했다.4주차 학습미션은 다음과 같았다.

# data[].attributes.body
블로그 작성은 4주차에 했는데 패들릿으로 옮겨서 제출하는 게 늦었습니다 :( 항상 좋은 말씀해주셔서 감사합니다 혼공족장님~~!

# data[].attributes.attachment_link.title
중요한 건 바로 : 네이버 블로그

# data[].attributes.body
4주차부터는 페북이 아니라는 사실에 놀라면서... 일단 페북에도 올렸지만 패들렛에도 요래요래 올려봅니다 화이팅

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

# data[].attributes.body
https://blog.naver.com/dunggrun/223540115411

# data[].attributes.body
페북에 올렸었는데 혹시나 날아갈까봐 한번더 올립니다.

더운 날씨에 이렇게 고생해주시는 족장님과 관계자분들께 감사합니다.

항상 건강조심하시고 화이팅하세요.

# data[].attributes.attachment_link.title
그림爸爸의 하루 : 네이버 블로그

# data[].attributes.body
4주차는 이미 올렸는데 추가로 작성한 글이 있어서 함께 올립니다 ^^

# data[].attributes.attachment_link.title
평범한 공부방 : 네이버 블로그