์ „์ฒด ๊ธ€

์•Œ๊ณ ๋ฆฌ์ฆ˜/๐Ÿ—‚๏ธ ์ •๋ฆฌ

LCS (์ตœ์žฅ ๊ณตํ†ต ๋ถ€๋ถ„ ์ˆ˜์—ด)

์ฝ”ํ…Œ ๋ณด๋‹ค๊ฐ€ ๋‚˜์˜จ ๊ฒƒ์ด๊ธฐ์— ์ •๋ฆฌํ•œ๋‹ค... LCS (Longest Common Subsequence)๋Š” ์ฃผ์–ด์ง„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ˆ˜์—ด ์ค‘์—์„œ ๋ชจ๋‘์˜ ๋ถ€๋ถ„์ˆ˜์—ด์ด ๋˜๋Š” ์ˆ˜์—ด๋“ค ์ค‘ ๊ฐ€์žฅ ๊ธด ๊ฒƒ์„ ์ฐพ๋Š” ๊ฒƒ์ด๋‹ค. ์˜ˆ์‹œ๋ฅผ ๋ณด์ž๋ฉด, ACAYKP์˜ ๋ถ€๋ถ„์ˆ˜์—ด์€ {A}, {C}, {A}, {Y}, {K}, {P}, {A, C}, {A, A}, {A, Y}, ... {A, C, A, Y, K, P} ์ด๊ณ , CAPCAK์˜ ๋ถ€๋ถ„์ˆ˜์—ด์€ {C}, {A}, {P}, {C}, {A}, {K}, {C, A}, {C, P}, {C, C}, ... {C, A, P, C, A, K}์ด ์žˆ๋Š”๋ฐ ๊ฐ๊ฐ์˜ ๋ถ€๋ถ„์ˆ˜์—ด ์ค‘์—์„œ ์„œ๋กœ ๊ฐ™์€ ๋ถ€๋ถ„์ˆ˜์—ด์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค. ๊ทธ์ค‘ ๊ฐ€์žฅ ๊ธด ๊ฒƒ์„ ์ฐพ์œผ๋ฉด ๋˜๋Š”๋ฐ ์œ„์˜ ์˜ˆ์‹œ์˜ ๋‹ต์€ ๊ธธ์ด๊ฐ€ 4์ธ {A, C, A, K} ์ด๋‹ค. ๋Œ€ํ‘œ์ ..

CS/โš™๏ธ ์šด์˜์ฒด์ œ

[โš™๏ธ OS] ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹  (IPC: Inter-Process Communication)

์ปค๋„์˜ ์ง€์› ํ•„์š” โœจ IPC์˜ ๋ชฉ์  = ํ”„๋กœ์„ธ์Šค ๋™๊ธฐํ™” data transfer sharing data event notification resource sharing and synchronization process control Message Passing ์ปค๋„์„ ํ†ตํ•ด ์ฃผ๊ณ  ๋ฐ›์Œ user ๊ณ„์ธต์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋“ค๋ผ๋ฆฌ ์ง์ ‘ ํ†ต์‹  X ๐Ÿ‘‰ OS์—์„œ ์ œ๊ณตํ•˜๋Š” message passing์— ๊ด€ํ•œ system call์„ ์ด์šฉํ•ด ์ปค๋„์„ ๊ฑฐ์ณ๊ฐ Messsage queue Pipes Mailboxes Sockets communication link๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ  ๋ฐ›์Œ ๐Ÿ”น Direct Communication ํ”„๋กœ์„ธ์Šค๋ฅผ ์ง์ ‘ ์ง€๋ช… send(P, message) receive(Q, message) ์ƒ๋Œ€๋ฐฉ์˜ I..

CS/โš™๏ธ ์šด์˜์ฒด์ œ

[โš™๏ธ OS] ํ”„๋กœ์„ธ์Šค ๋™๊ธฐํ™”

ํ”„๋กœ์„ธ์Šค ๋™๊ธฐํ™” ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ ์ž์›์— ์ ‘๊ทผํ•œ๋‹ค๋ฉด race condition(๊ฒฝํ•ฉ์กฐ๊ฑด)์ด ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์„ ๋ง‰๊ธฐ ์œ„ํ•ด์„œ ํ•„์š”ํ•œ mechanism์ด ์žˆ๋‹ค. ๐Ÿ”น Locking Mechanism ์–ด๋–ค ์ž‘์—…์ด ์ˆ˜ํ–‰๋˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š”๋‹ค ๐Ÿ‘‰ before entering critical section ๐Ÿ‘‰ before accessing shared data critical section(์ž„๊ณ„์˜์—ญ)์€ ์ตœ๋Œ€ํ•œ ์งง๊ฒŒ ์„ค์ •ํ•ด์•ผํ•œ๋‹ค multi-processors์—์„œ interrupt-based locks์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์–ด๋ ค์›€ ๐Ÿ‘‰ read-write instructions ์œผ๋กœ ํ•ด๊ฒฐ ๐Ÿ”น Semaphore Synchronization tool Counting semaphore Binary semaphore โž” 0 ๋˜๋Š” 1 ๊ฐ’๋งŒ..

์•Œ๊ณ ๋ฆฌ์ฆ˜/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋‹จ์–ด ๋ณ€ํ™˜

โœจ BFS/DFS https://school.programmers.co.kr/learn/courses/30/lessons/43163# ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”. programmers.co.kr ๐Ÿ“ ๊ณ ๋ คํ•ด์•ผํ•  ์  ํ•œ ๋ฒˆ์— ํ•œ ๊ฐœ์˜ ์•ŒํŒŒ๋ฒณ๋งŒ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ begin์—์„œ target์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฐ€์žฅ ์งง์€ ๋ณ€ํ™˜ ๊ณผ์ • ์ฐพ๊ธฐ ๊ตณ์ด ๋ฐฐ์—ด์˜ ์ˆœ์„œ๋Œ€๋กœ ์ฐพ์„ ํ•„์š” ์—†์Œ ๐Ÿ•น๏ธ ํ’€์ด๊ณผ์ • ๐Ÿ‘‰ ์ด ๋ฌธ์ œ ๊ฐ™์€ ๊ฒฝ์šฐ DFS์™€ BFS ๋ชจ๋‘ ํ’€์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ํ•˜์ง€๋งŒ DFS๋กœ ๊ตฌํ˜„ํ•  ์‹œ์—๋Š” ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ํฌ๋‹ค. ๐Ÿ”น DFS words ๋ฐฐ์—ด์—์„œ ํ˜„์žฌ ๋‹จ์–ด์™€ ํ•œ ๊ธ€์ž๋งŒ ๋‹ค๋ฅธ ๋‹จ์–ด๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค. ๐Ÿ‘‰ ์ค‘๋ณต ํƒ์ƒ‰์„ ๋ฐฉ..

CS/โš™๏ธ ์šด์˜์ฒด์ œ

[โš™๏ธ OS] CPU ์Šค์ผ€์ค„๋ง

CPU ์Šค์ผ€์ค„๋ง ๐Ÿ‘‰ ์–ด๋Š ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‚ฌ์šฉ๋  ๊ฒƒ์ธ์ง€ ๊ฒฐ์ • ๐Ÿ”น CPU ์Šค์ผ€์ค„๋Ÿฌ Ready ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค ์ค‘์—์„œ ์ด๋ฒˆ์— CPU์— ์ค„ ํ”„๋กœ์„ธ์Šค ์„ ์ • ๐Ÿ”น Dispatcher CPU ์ œ์–ด๊ถŒ์„ CPU ์Šค์ผ€์ค„๋Ÿฌ์— ์˜ํ•ด ์„ ํƒ๋œ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ๋„˜๊น€ = context switching ๐Ÿ”น ๊ณ ๋ ค์‚ฌํ•ญ ๋ˆ„๊ตฌํ•œํ…Œ CPU๋ฅผ ์ค„ ๊ฒƒ์ธ์ง€ ์ค‘๊ฐ„์— CPU๋ฅผ ๋บ์–ด์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ํ•  ๊ฒƒ์ธ์ง€ ๋˜๋Š” ๊ณ„์† ์“ฐ๊ฒŒ ํ•  ๊ฒƒ์ธ์ง€ ๐Ÿ”น scheduling criteria CPU utilization โž” ์ตœ๋Œ€ํ•œ ์‚ฌ์šฉ Throughput Turnaround Time (์ด ์†Œ์š”์‹œ๊ฐ„) Waiting Time Response time (CPU๋ฅผ ์ตœ์ดˆ ์–ป์„ ๋•Œ๊นŒ์ง€ ๊ฑธ๋ฆฐ ์‹œ๊ฐ„) ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๐Ÿ”น nonpreemptive (๋น„์„ ์ ํ˜•) ๐Ÿ”น preemptive (์„ ์ ํ˜•) ๐Ÿ”ธ ..

์•Œ๊ณ ๋ฆฌ์ฆ˜/BOJ

[BOJ] 20058 ๋งˆ๋ฒ•์‚ฌ ์ƒ์–ด์™€ ํŒŒ์ด์–ด์Šคํ†ฐ - Java

โœจ BFS + ๊ตฌํ˜„ โž” ๋ถ€๋ถ„ ๊ฒฉ์ž๋ฅผ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ 90๋„ ํšŒ์ „ https://www.acmicpc.net/problem/20058 20058๋ฒˆ: ๋งˆ๋ฒ•์‚ฌ ์ƒ์–ด์™€ ํŒŒ์ด์–ด์Šคํ†ฐ ๋งˆ๋ฒ•์‚ฌ ์ƒ์–ด๋Š” ํŒŒ์ด์–ด๋ณผ๊ณผ ํ† ๋„ค์ด๋„๋ฅผ ์กฐํ•ฉํ•ด ํŒŒ์ด์–ด์Šคํ†ฐ์„ ์‹œ์ „ํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ค๋Š˜์€ ํŒŒ์ด์–ด์Šคํ†ฐ์„ ํฌ๊ธฐ๊ฐ€ 2N ร— 2N์ธ ๊ฒฉ์ž๋กœ ๋‚˜๋ˆ„์–ด์ง„ ์–ผ์ŒํŒ์—์„œ ์—ฐ์Šตํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ์œ„์น˜ (r, c)๋Š” ๊ฒฉ์ž์˜ rํ–‰ c www.acmicpc.net ๐Ÿ“ ๊ณ ๋ คํ•ด์•ผํ•  ์  2^L * 2^L ํฌ๊ธฐ์˜ ๋ถ€๋ถ„ ๊ฒฉ์ž๋กœ ๋‚˜๋ˆ„๊ณ  ๋ชจ๋“  ๋ถ€๋ถ„ ๊ฒฉ์ž๋ฅผ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ 90๋„ ํšŒ์ „ L=1์ผ ๋•Œ, 2x2์˜ ๋ถ€๋ถ„๊ฒฉ์ž๊ฐ€ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ 90๋„ ํšŒ์ „ L=2์ผ ๋•Œ, 4x4์˜ ๋ถ€๋ถ„๊ฒฉ์ž๊ฐ€ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ 90๋„ ํšŒ์ „ (x, y)์นธ์—์„œ ์ธ์ ‘ํ•œ ์นธ(์ƒํ•˜์ขŒ์šฐ) ์ค‘ ์–ผ์Œ์ด ์žˆ๋Š” ์นธ์ด 3๊ฐœ ๋ฏธ๋งŒ์ด๋ฉด (x, y)์นธ ์–ผ์Œ์˜..

CS/โš™๏ธ ์šด์˜์ฒด์ œ

[โš™๏ธ OS] Thread

์Šค๋ ˆ๋“œ ์Šค๋ ˆ๋“œ ํ”„๋กœ์„ธ์Šค ๋‚ด๋ถ€์— ์žˆ์Œ. ํ•œ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ โžก๏ธ concurrency ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ ์Šค๋ ˆ๋“œ๋ผ๋ฆฌ address space, resource ๊ณต์œ  ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ modern OS embedded systems multi-core processors network servers ๐Ÿ”น Multiple Threads ๊ฐ thread๋Š” ๋ณ„๊ฐœ๋กœ ์‹คํ–‰ Memory์™€ I/O state์€ ๊ณต์œ  thread 1์—์„œ thread 2๋กœ context switching์ด ์ผ์–ด๋‚˜๋ฉด thread1์ด ๊ฐ€์ง€๊ณ  ์žˆ๋˜ register set์„ CPU state์— ์ €์žฅ thread2์˜ CPU state์„ register set์— load Hyper-Threading : Context switching ove..

CS/โš™๏ธ ์šด์˜์ฒด์ œ

[โš™๏ธ OS] Process

ํ”„๋กœ์„ธ์Šค ๐Ÿ”น ํ”„๋กœ์„ธ์Šค ์ฝ”๋“œ์˜ ์ผ๋ถ€. ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ ์ž๊ธฐ ๋…๋ฆฝ์ ์ธ resource ๊ฐ€์ง. single address space โžก๏ธ protection ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์™€ ๊ณต์œ  X ๐Ÿ”น ํŠน์ง• ํ”„๋กœ์„ธ์Šค ๊ฐ๊ฐ ๊ณ ์œ ์˜ ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ ๋ณด์œ  ๊ณ ์œ ์˜ ๋ฉ”๋ชจ๋ฆฌ ํŽ˜์ด์ง€ ๋ณด์œ  ๊ณ ์œ ์˜ file descriptor table ๋ณด์œ  PID (Process ID) ๐Ÿ”น ํ”„๋กœ์„ธ์Šค์˜ Context CPU ์ˆ˜ํ–‰ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ•˜๋“œ์›จ์–ด ๋ฌธ๋งฅ Program Counter register ํ”„๋กœ์„ธ์Šค ์ฃผ์†Œ ๊ณต๊ฐ„ code data stack ํ”„๋กœ์„ธ์Šค ๊ด€๋ จ ์ปค๋„ ์ž๋ฃŒ๊ตฌ์กฐ PCB Kernel Stack ๐Ÿ”น ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ ์ž์‹์€ ๋ถ€๋ชจ์˜ ๊ณต๊ฐ„์„ ๋ณต์‚ฌํ•ด ๊ทธ ๊ณต๊ฐ„์— ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋žจ์„ ์˜ฌ๋ฆผ ํŠธ๋ฆฌ(๊ณ„์ธต ๊ตฌ์กฐ) ํ˜•์„ฑ fork() ์‹œ์Šคํ…œ์ฝœ์„ ํ†ตํ•ด ์ž์‹ ๊ณผ ๋™์ผํ•œ ํ”„๋กœ..

soogoori
๐Ÿƒ๐Ÿป‍โ™€๏ธ์Šคํ…๋ฐ”์ด์Šคํ…