πŸ“ Computer Science/✏ OS

    동기와 비동기 & Blockingκ³Ό Non-Blocking

    동기와 비동기 & Blockingκ³Ό Non-Blocking

    동기와 비동기 & Blockingκ³Ό Non-Blocking 1. 동기(Synchronous)와 비동기(Asynchronous) ν•¨μˆ˜λ₯Ό μ‹€ν–‰μ‹œν‚΄κ³Ό λ™μ‹œμ— λ°˜ν™˜ 값이 κΈ°λŒ€λ˜λŠ” κ²½μš°λŠ” 동기라 ν‘œν˜„ν•˜κ³  그렇지 μ•Šμ€ κ²½μš°λŠ” 비동기라고 ν‘œν˜„ν•œλ‹€. 동기: μ‹€ν–‰λ˜μ—ˆμ„ λ•Œ 값이 λ°˜ν™˜λ˜κΈ° μ „κΉŒμ§€λŠ” Blocking μƒνƒœμ΄λ‹€. 비동기: Blocking λ˜μ§€ μ•Šκ³  이벀트 큐에 λ„£κ±°λ‚˜ λ°±κ·ΈλΌμš΄λ“œ μŠ€λ ˆλ“œμ—κ²Œ ν•΄λ‹Ή taskλ₯Ό μœ„μž„ν•˜κ³  λ‹€μŒ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ―€λ‘œ κΈ°λŒ€λ˜λŠ” 값이 λ°”λ‘œ λ°˜ν™˜λ˜μ§€ μ•ŠλŠ”λ‹€. 2. Blockingκ³Ό Non-Blocking κ°„λ‹¨νžˆ λ§ν•΄μ„œ 호좜된 ν•¨μˆ˜κ°€ ν˜ΈμΆœν•œ ν•¨μˆ˜μ—κ²Œ μ œμ–΄κΆŒμ„ κ±΄λ„€μ£ΌλŠ” 유무의 차이라고 λ³Ό 수 μžˆλ‹€. 1) Blocking I/O ν”„λ‘œμ„ΈμŠ€(μŠ€λ ˆλ“œ)κ°€ μ»€λ„μ—κ²Œ μž…μΆœλ ₯ μž‘μ—…μ„ μš”μ²­ν•˜λŠ” recvfrom() 함..

    ν”„λ‘œμ„ΈμŠ€ 동기화

    ν”„λ‘œμ„ΈμŠ€ 동기화 1. μŠ€λ ˆλ“œ 세이프(Thread Safe) λ©€ν‹° μŠ€λ ˆλ“œ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ 일반적으둜 μ–΄λ–€ ν•¨μˆ˜λ‚˜ λ³€μˆ˜, ν˜Ήμ€ 객체가 μ—¬λŸ¬ μŠ€λ ˆλ“œλ‘œλΆ€ν„° λ™μ‹œμ— 접근이 이루어져도 ν”„λ‘œκ·Έλž¨μ˜ 싀행에 λ¬Έμ œκ°€ μ—†μŒμ„ λœ»ν•œλ‹€. 보닀 μ—„λ°€ν•˜κ²ŒλŠ” ν•˜λ‚˜μ˜ ν•¨μˆ˜κ°€ ν•œ μŠ€λ ˆλ“œλ‘œλΆ€ν„° ν˜ΈμΆœλ˜μ–΄ μ‹€ν–‰ 쀑일 λ•Œ, λ‹€λ₯Έ μŠ€λ ˆλ“œκ°€ κ·Έ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ λ™μ‹œμ— ν•¨κ»˜ μ‹€ν–‰λ˜λ”λΌλ„ 각 μŠ€λ ˆλ“œμ—μ„œμ˜ ν•¨μˆ˜μ˜ μˆ˜ν–‰ κ²°κ³Όκ°€ μ˜¬λ°”λ‘œ λ‚˜μ˜€λŠ” κ²ƒμœΌλ‘œ μ •μ˜ν•œλ‹€. 2. μž„κ³„ μ˜μ—­(Critical Section) μž„κ³„ μ˜μ—­μ΄λž€ λ™μΌν•œ μžμ›(곡유 μžμ›)을 λ™μ‹œμ— μ ‘κ·Όν•˜λŠ” μž‘μ—…(곡유 λ³€μˆ˜ μ‚¬μš©, 동일 파일 μ‚¬μš© λ“±)을 μ‹€ν–‰ν•˜λŠ” μ½”λ“œ μ˜μ—­μ΄λ‹€. μ΄λŸ¬ν•œ μž„κ³„ μ˜μ—­ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄μ„œλŠ” 3가지 쑰건을 λ§Œμ‘±ν•΄μ•Ό ν•œλ‹€. μƒν˜Έ 배제(Mutual Exclusion): ν•œ ν”„..

    ν”„λ‘œμ„ΈμŠ€ μŠ€μΌ€μ€„λŸ¬

    ν”„λ‘œμ„ΈμŠ€ μŠ€μΌ€μ€„λŸ¬

    1. μŠ€μΌ€μ€„λ§(Scheduling) ν”„λ‘œμ„ΈμŠ€κ°€ μƒμ„±λ˜μ–΄ 싀행될 λ•Œ ν•„μš”ν•œ μ‹œμŠ€ν…œμ˜ μ—¬λŸ¬ μžμ›μ„ ν•΄λ‹Ή ν”„λ‘œμ„ΈμŠ€μ—κ²Œ ν• λ‹Ήν•˜λŠ” μž‘μ—…μ΄λ‹€. 1) μž₯κΈ°(μž‘μ—…) μŠ€μΌ€μ€„λ§ λ©”λͺ¨λ¦¬μ™€ λ””μŠ€ν¬ μ‚¬μ΄μ˜ μŠ€μΌ€μ€„λ§μ„ λ‹΄λ‹Ήν•œλ‹€. λ§Žμ€ ν”„λ‘œμ„ΈμŠ€κ°€ ν•œκΊΌλ²ˆμ— λ©”λͺ¨λ¦¬μ— 올라올 경우 λ””μŠ€ν¬μ— μž„μ‹œλ‘œ μ €μž₯λ˜λŠ”λ° μ €μž₯된 ν”„λ‘œμ„ΈμŠ€ 쀑 μ–΄λ–€ ν”„λ‘œμ„ΈμŠ€λ₯Ό λ©”λͺ¨λ¦¬μ— ν• λ‹Ήν•˜μ—¬ μ€€λΉ„ 큐둜 보낼지 κ²°μ •ν•œλ‹€. 2) 쀑기 μŠ€μΌ€μ€„λ§ ν˜„ μ‹œμŠ€ν…œμ—μ„œ λ©”λͺ¨λ¦¬μ— λ„ˆλ¬΄ λ§Žμ€ ν”„λ‘œκ·Έλž¨μ΄ λ™μ‹œμ— μ˜¬λΌκ°€λŠ” 것을 μ‘°μ ˆν•œλ‹€ 3) 단기(ν”„λ‘œμ„Έμ„œ) μŠ€μΌ€μ€„λ§ CPU와 λ©”λͺ¨λ¦¬ μ‚¬μ΄μ˜ μŠ€μΌ€μ€„λ§κ³Ό λ¬Έλ§₯ κ΅ν™˜μ„ λ‹΄λ‹Ήν•œλ‹€. μ€€λΉ„ 큐에 μ‘΄μž¬ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€ 쀑 μ–΄λ–€ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ‹€ν–‰μ‹œν‚¬μ§€ κ²°μ •ν•œλ‹€. 4) μŠ€μΌ€μ€„λ§ 큐(Queue) μž‘μ—…(Job) 큐: ν˜„μž¬ μ‹œμŠ€ν…œ 내에 μžˆλŠ” λͺ¨λ“  ν”„λ‘œμ„ΈμŠ€λ“€μ˜ 집합이닀...

    ν”„λ‘œμ„ΈμŠ€ μ£Όμ†Œ 곡간과 κΈ°μ–΅ 클래슀

    ν”„λ‘œμ„ΈμŠ€ μ£Όμ†Œ 곡간과 κΈ°μ–΅ 클래슀

    1. ν”„λ‘œμ„ΈμŠ€ μ£Όμ†Œ 곡간 ν”„λ‘œκ·Έλž¨μ΄ CPUμ—μ„œ λͺ…령을 μˆ˜ν–‰ν•˜λ €λ©΄ μˆ˜ν–‰ν•˜λ €λŠ” μ£Όμ†Œ μ˜μ—­μ΄ λ©”λͺ¨λ¦¬μ— μ˜¬λΌκ°€ μžˆμ–΄μ•Ό ν•˜λŠ”λ° 이 μ£Όμ†Œ μ˜μ—­μ€ 크게 μŠ€νƒ, νž™, 데이터, μ½”λ“œ μ˜μ—­μœΌλ‘œ κ΅¬λΆ„λœλ‹€. μŠ€νƒ: ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜, 볡귀 μ£Όμ†Œμ™€ 지역 λ³€μˆ˜ 같은 μž„μ‹œ 자료λ₯Ό μ €μž₯ν•˜λŠ” λΆ€λΆ„ νž™: ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑에 λ™μ μœΌλ‘œ ν• λ‹Ήλ˜λŠ” λ³€μˆ˜λ₯Ό μ €μž₯ν•˜λŠ” λΆ€λΆ„ 데이터: μ „μ—­ λ³€μˆ˜, 정적 λ³€μˆ˜ λ“± ν”„λ‘œκ·Έλž¨μ΄ μ‚¬μš©ν•˜λŠ” 데이터λ₯Ό μ €μž₯ν•˜λŠ” λΆ€λΆ„ μ½”λ“œ: μž‘μ„±ν•œ ν”„λ‘œκ·Έλž¨ ν•¨μˆ˜λ“€μ˜ μ½”λ“œκ°€ 기계어 λͺ…λ ΉμœΌλ‘œ λ³€ν™˜λ˜μ–΄ μ €μž₯된 λΆ€λΆ„ 2. κΈ°μ–΅ 클래슀(Storage Class) λ³€μˆ˜ μ„ μ–Έ μ‹œ λ©”λͺ¨λ¦¬ 내에 λ³€μˆ˜ 값을 μ €μž₯ν•˜κΈ° μœ„ν•œ κΈ°μ–΅ μ˜μ—­μ΄ ν• λ‹Ήλ˜λŠ”λ° ν• λ‹Ήλ˜λŠ” κΈ°μ–΅ μ˜μ—­μ— 따라 μ‚¬μš© λ²”μœ„μ— μ œν•œμ΄ μžˆλ‹€. μ΄λŸ¬ν•œ κΈ°μ–΅ μ˜μ—­μ„ κ²°μ •ν•˜λŠ” μž‘μ—…μ„ κΈ°μ–΅ 클래슀라 ν•œ..

    ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œ

    ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œ

    1. ν”„λ‘œμ„ΈμŠ€(Process) μ‹€ν–‰ 쀑인 ν”„λ‘œκ·Έλž¨μœΌλ‘œ λ””μŠ€ν¬λ‘œλΆ€ν„° 메인 λ©”λͺ¨λ¦¬μ— μ μž¬λ˜μ–΄ CPU의 할당을 받을 수 μžˆλŠ” 것이닀. μš΄μ˜μ²΄μ œλ‘œλΆ€ν„° μ£Όμ†Œ 곡간, 파일, λ©”λͺ¨λ¦¬ 등을 ν• λ‹Ήλ°›μœΌλ©° 이것듀을 μ΄μΉ­ν•˜μ—¬ ν”„λ‘œμ„ΈμŠ€λΌκ³  ν•œλ‹€. 1) ν”„λ‘œμ„ΈμŠ€ μ œμ–΄ 블둝(Process Control Block, PCB) νŠΉμ • ν”„λ‘œμ„ΈμŠ€μ— λŒ€ν•œ μ€‘μš”ν•œ 정보(metadata)λ₯Ό μ €μž₯ν•˜κ³  μžˆλŠ” 운영체제의 μžλ£Œκ΅¬μ‘°μ΄λ‹€. μ—°κ²° 리슀트λ₯Ό μ΄μš©ν•΄ 메인 λ©”λͺ¨λ¦¬μ—μ„œ κ΄€λ¦¬λ˜λ©° ν”„λ‘œμ„ΈμŠ€ 생성과 λ™μ‹œμ— κ³ μœ ν•œ PCBκ°€ μƒμ„±λ˜κ³  ν”„λ‘œμ„ΈμŠ€ μ™„λ£Œ μ‹œ μ œκ±°λœλ‹€. CPU ν• λ‹Ή ν›„ μž‘μ—…μ„ ν•˜λ‹€κ°€ ν”„λ‘œμ„ΈμŠ€ μ „ν™˜(λ¬Έλ§₯ κ΅ν™˜)이 λ°œμƒν•˜λ©΄, PCB에 μ§„ν–‰ν•˜λ˜ μž‘μ—…μ„ λͺ¨λ‘ μ €μž₯ν•˜κ³  CPUλ₯Ό λ°˜ν™˜ν•œλ‹€. λ‹€μ‹œ CPUλ₯Ό ν• λ‹Ήλ°›κ²Œ 되면, PCB에 μ €μž₯된 λ‚΄μš©μ„ λΆˆλŸ¬μ™€ μ’…λ£Œλλ˜..

    컴퓨터 μ‹œμŠ€ν…œμ˜ ꡬ성

    컴퓨터 μ‹œμŠ€ν…œμ˜ ꡬ성

    컴퓨터 μ‹œμŠ€ν…œμ€ 데이터λ₯Ό μ²˜λ¦¬ν•˜λŠ” 물리적 기계 μž₯치인 ν•˜λ“œμ›¨μ–΄μ™€ νŠΉλ³„ν•œ μž‘μ—…μ„ μ§€μ‹œν•˜λ €κ³  λͺ…λ Ήμ–΄λ‘œ μž‘μ„±ν•œ ν”„λ‘œκ·Έλž¨μΈ μ†Œν”„νŠΈμ›¨μ–΄λ‘œ κ΅¬μ„±λ˜μ–΄ μžˆλ‹€. ν•˜λ“œμ›¨μ–΄ ν”„λ‘œμ„Έμ„œ, λ©”λͺ¨λ¦¬, λ²„μŠ€ λ“± λ‹€μ–‘ν•œ μ£Όλ³€ μž₯치둜 κ΅¬μ„±λ˜μ–΄ μžˆλ‹€. 1. ν”„λ‘œμ„Έμ„œ(CPU) μš΄μ˜μ²΄μ œμ™€ κ°€μž₯ λ°€μ ‘ν•œ ν•˜λ“œμ›¨μ–΄λ‘œ 컴퓨터 각 λΆ€λΆ„μ˜ λ™μž‘μ„ μ œμ–΄ν•˜κ³  연산을 μˆ˜ν–‰ν•œλ‹€. 1) λ™μž‘ κ³Όμ • μ£Ό κΈ°μ–΅μž₯μΉ˜λŠ” μž…λ ₯μž₯μΉ˜μ—μ„œ μž…λ ₯받은 데이터 λ˜λŠ” 보쑰기얡μž₯μΉ˜μ— μ €μž₯된 ν”„λ‘œκ·Έλž¨ μ½μ–΄μ˜¨λ‹€. CPUλŠ” ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜κΈ° μœ„ν•΄ μ£Ό κΈ°μ–΅μž₯μΉ˜μ— μ €μž₯된 ν”„λ‘œκ·Έλž¨ λͺ…령어와 데이터λ₯Ό 읽어와 μ²˜λ¦¬ν•˜κ³  κ²°κ³Όλ₯Ό λ‹€μ‹œ μ£Ό κΈ°μ–΅μž₯μΉ˜μ— μ €μž₯ν•œλ‹€. μ£Ό κΈ°μ–΅μž₯μΉ˜λŠ” 처리 κ²°κ³Όλ₯Ό 보쑰기얡μž₯μΉ˜μ— μ €μž₯ν•˜κ±°λ‚˜ 좜λ ₯μž₯치둜 보낸닀. μ œμ–΄μž₯μΉ˜λŠ” 1~3 κ³Όμ •μ—μ„œ λͺ…λ Ήμ–΄κ°€ μˆœμ„œλŒ€λ‘œ μ‹€ν–‰λ˜λ„λ‘ 각 μž₯치λ₯Ό μ œμ–΄ν•œ..