์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- ์ค๋ธ์
- kraftonjungle
- c#
- ํํ ์ค
- BFS
- ๋ค์ต์คํธ๋ผ
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- C
- pintos
- ์๊ณ ๋ฆฌ์ฆ
- ํฌ๋ํํค ์ ๊ธ
- KRAFTON JUNGLE
- TiL
- ๋ฐฑ์ค
- ์ ์-์ ํฌ
- ์๊ณ ๋ฆฌ์ฆ์์ -๋๋น์ฐ์ ํ์2
- ํ์ด์ฌ
- User Stack
- ํฌ๋ํํค์ ๊ธ
- ๋คํธ์ํฌ
- Unity
- ํฌ๋ํํค์ ๊ธ4๊ธฐ
- ์ถ์ํด๋์ค์์ธํฐํ์ด์ค
- ์ ๋ํฐ
- ํฌ๋ํํค ์ ๊ธ 4๊ธฐ
- ์ด๋ฒคํธ ํจ์ ์คํ ์์
- anonymous page
- 4๊ธฐ
- project3
- ์ฐ๊ฒฐ๋ฆฌ์คํธ
- Today
- Total
๋ง๊ฐ๋ก๊ทธ
ํฌ๋ํํค ์ ๊ธ WEEK08 DAY65 - PintOS Project2 USER PROGRAM ๋ณธ๋ฌธ
ํฌ๋ํํค ์ ๊ธ WEEK08 DAY65 - PintOS Project2 USER PROGRAM
habbn 2024. 3. 12. 23:11๐2024.3.12
1. PintOS Project 2 - GitBook
2. ๋ฐฑ์ค ๋ฌธ์ ํ๊ธฐ
์ด๋ฒ์ ์ฐ๋ฆฌ๊ฐ ๊ตฌํํด์ผ ํ ๋ฌธ์ ๋ฅผ ์๊ธฐ ์ํด์ GitBook์ ์ฝ์๋ค.
์ฐ์ Argument Passing ์ธ์ ์ ๋ฌ ๋ถ๋ถ์ ๊ตฌํํด์ผํ๋ค.
์ฝ์น๋๊ป์ Project2. argument passing์ ํฌ์ธํฐ๋ฅผ ์ ํํ๊ฒ ์ดํดํ๊ณ ์๋ค๋ฉด ์ถฉ๋ถํ ํ ์ ์๋ ๊ณผ์ ๋ผ๊ณ ํ๋ค.
hex_dump๋ฅผ ์ด์ฉํด ๋ด๊ฐ ๋๊ธด argument๋ค์ด ๋ฉ๋ชจ๋ฆฌ์ ์ ํํ ์์น์ ์ ์ฅ๋จ์ ํ์ธํ๋ฉด ๋๋ ๊ณผ์ ๋ค.
gitbook์ ๋ณด๋ฉด
Implement the argument passing.
Currently, process_exec() does not support passing arguments to new processes. Implement this functionality, by extending process_exec() so that instead of simply taking a program file name as its argument, it divides it into words at spaces. The first word is the program name, the second word is the first argument, and so on. That is, process_exec("grep foo bar") should run grep passing two arguments foo and bar.
Within a command line, multiple spaces are equivalent to a single space, so that process_exec("grep foo bar") is equivalent to our original example. You can impose a reasonable limit on the length of the command line arguments. For example, you could limit the arguments to those that will fit in a single page (4 kB). (There is an unrelated limit of 128 bytes on command-line arguments that the pintos utility can pass to the kernel.)
You can parse argument strings any way you like. If you're lost, look at strtok_r(), prototyped in include/lib/string.h and implemented with thorough comments in lib/string.c. You can find more about it by looking at the man page (run man strtok_r at the prompt).
ํ์ฌ, process_exec() ํจ์๋ ์๋ก์ด ํ๋ก์ธ์ค๋ค์ ์ธ์๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ ์ง์ํ์ง ์๋๋ค.
process_exec() ํจ์๋ฅผ ํ์ฅ ๊ตฌํํด์, ์ง๊ธ์ฒ๋ผ ๋จ์ํ ํ๋ก๊ทธ๋จ ํ์ผ ์ด๋ฆ๋ง์ ์ธ์๋ก ๋ฐ์์ค๊ฒ ํ๋ ๋์ ๊ณต๋ฐฑ์ ๊ธฐ์ค์ผ๋ก ์ฌ๋ฌ ๋จ์ด๋ก ๋๋์ด์ง๊ฒ ๋ง๋ ๋ค.
์ฒซ ๋ฒ์งธ ๋จ์ด๋ ํ๋ก๊ทธ๋จ ์ด๋ฆ์ด๊ณ , ๋ ๋ฒ์งธ ๋จ์ด๋ ์ฒซ ๋ฒ์งธ ์ธ์์ด๋ฉฐ, ๊ทธ๋ฐ ์์ผ๋ก ๊ณ์ ์ด์ด์ง๊ฒ ๋ง๋ค๋ฉด ๋๋ค.
๋ฐ๋ผ์ ํจ์, process_exec("grep foo bar") ๋๋ ๊ฐ์ ์ธ์ foo์ bar๋ฅผ ๋ฐ์์ grepํ๋ก๊ทธ๋จ์ ์คํ์์ผ์ผ ํ๋ค.
์ปค๋งจ๋๋ผ์ธ์์, ์ฌ๋ฌ ๊ฐ์ ๊ณต๋ฐฑ์ ํ๋์ ๊ณต๋ฐฑ๊ณผ ๊ฐ๊ฒ ์ฒ๋ฆฌํด์ผ ํ๋ค. ๊ทธ๋ฌ๋ฏ๋ก process_exec("grep foo bar") ๋ ์์ ์๋ณธ ์์์ ๋์ผํ๊ฒ ๋์ํด์ผ ํ๋ค.
์ธ์๋ก ๋ค์ด์จ ๋ฌธ์์ด์ ๋น์ ์ด ์ํ๋ ๋๋ก ํ์ฑํ๋ฉด ๋๋ค.
๋ง์ฝ ์ด๋ป๊ฒ ํด์ผ ํ ์ง ๋ชจ๋ฅด๊ฒ ๋ค๋ฉด, include/lib/string.h ์ ์๋ strtok_r() ํจ์์ lib/string.c ์ ๊ตฌํ๋ ๊ฒ๋ค์ ์ฐธ๊ณ ํด๋ด๋ผ.
๋ผ๊ณ ํฉ๋๋น..
์ผ๋จ gitbook project2 : USER PROGRAMS - Introduction ๊ณผ Argument Passing ๋ถ๋ถ์ ์ฝ์ ๊ฒฐ๊ณผ
1. argument passing ๊ตฌํ!
2. page fault () ๊ตฌํ - ์ ์ ๊ฐ ์ ๋ฌํ ์๋ชป๋ ํฌ์ธํฐ์ ๋ฌธ์ ์์ด ์ ๋์ํ๊ธฐ ์ํด์
(๊ตฌํ ์์๊ฐ ์ด๋ป๊ฒ ๋๋์ง๋ ์์ง ์ ๋ชจ๋ฅด๊ฒ ๋ด)
2๊ฐ์ ํฉ๋ฆฌ์ ์ธ ๋ฐฉ๋ฒ์ด ์๋๋ฐ ์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ์ ์ ๊ฐ ์ ๋ฌํ ํฌ์ธํฐ์ ๋ฌธ์ ๊ฐ ์๋์ง ๊ฒ์ฌํ ํ์ ์ญ์ฐธ์กฐํ๋ ๊ฒ์ด๋ค.
๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ์ ์ ๊ฐ ์ ๋ฌํ ํฌ์ธํฐ๊ฐ KERN_BASE ๋ณด๋ค ์๋ ๋ถ๋ถ์ ๊ฐ๋ฆฌํค๊ณ ์๋์ง ๊ฒ์ฌํ ํ์ ์ญ์ฐธ์กฐํ๋ ๊ฒ์ด๋ค.
์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ์ด ๊ฐ์ฅ ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์๋ ๋ฐฉ๋ฒ์ด๊ณ ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ด ๋ค๋ฃจ๊ธฐ ๊น๋ค๋กญ๋ค๊ณ ํ๋๋ฐ ์ด๋ค ๋ฐฉ๋ฒ์ผ๋ก ํํ ์ง๋ ๋ด์ผ ์กฐ์๋ค๊ณผ ์์ํด๋ด์ผ๊ฒ ๋ค.
๋ฐฑ์ค 2869 ๋ฌํฝ์ด๋ ์ฌ๋ผ๊ฐ๊ณ ์ถ๋ค
# ๋ฐฑ์ค 2869๋ฌํฝ์ด๋ ์ฌ๋ผ๊ฐ๊ณ ์ถ๋ค.
# ๋์ด V, ๋ฎ์ A๋ฏธํฐ ์ฌ๋ผ๊ฐ ์ ์์ง๋ง , ๋ฐค์ ์ ์ ์๋ ๋์ B๋ฏธํฐ ๋ฏธ๋๋ฌ์ง
# ์ฌ๋ผ๊ฐ์ผํ ๋์ด = V-B
# ํ๋ฃจ์ ๊ฐ ์ ์๋ ๊ฑฐ๋ฆฌ = A-B
# ์ฌ๋ผ๊ฐ์ผํ ๊ฑฐ๋ฆฌ % ํ๋ฃจ์ ๊ฐ ์ ์๋ ๊ฑฐ๋ฆฌ == 0 ์ด๋ฉด ๋ฎ ๋์ ์ ์๊น์ง ๊ฐ๋ค๋ ๋ง
# ์ฌ๋ผ๊ฐ์ผํ ๊ฑฐ๋ฆฌ % ํ๋ฃจ์ ๊ฐ ์ ์๋ ๊ฑฐ๋ฆฌ != 0 ์ด๋ฉฐ ๋ฎ ๋์ ๋ชป๊ฐ -> ํ๋ฃจ ๋ ๊ฑธ๋ฆผ +1
A,B,V = map(int,input().split())
if (V-B)%(A-B) == 0:
print((V-B)//(A-B))
else:
print((V-B)//(A-B)+1)